为了引入类似C#/Java语言的语法,通过预处理命令重新定义C++访问修饰符可能会产生什么影响?
#include <iostream>
// The access modifiers are redefined here.
#define public public:
#define protected protected:
#define private private:
class Halo
{
public Halo(int xx)
{
x = xx;
}
public int getX()
{
return x;
}
private int x;
};
int main()
{
Halo* halo = new Halo(3);
std::cout << halo->getX();
return 0;
}发布于 2012-12-21 08:28:01
class B : public A {};
expected '{' before ':' token
expected unqualified-id before ':' token
expected class-name before ':' token
发布于 2012-12-21 08:31:14
除了已经提到的语法错误的后果之外。这样做会让其他人感到困惑。很久以前,人们会用pascal编程,然后转移到C语言,使用#define BEGIN {和#define END },这导致了代码看起来有点像Pascal,但当然在许多其他方面根本不像pascal。
你正在用一种不同的语言编程。那么为什么要假装它不是呢?
我猜是因为你认为它是Java,所以你也忘了删除你的光环对象了?
发布于 2012-12-21 08:32:52
任何事情都可能发生,因为重新定义语言关键字是未定义的行为。
一般来说,你应该为你正在使用的语言编写惯用的代码。如果您想使用Java/C#语法,只需用这些语言编写代码即可。
https://stackoverflow.com/questions/13982623
复制相似问题