为了引入类似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;
}
答案 0 :(得分:9)
class B : public A {};
expected '{' before ':' token
expected unqualified-id before ':' token
expected class-name before ':' token
答案 1 :(得分:3)
除了已经提到的语法错误后果之外。
这样做会让其他人感到困惑。很久以前,人们会在Pascal中编程,然后在转移到C时使用#define BEGIN {
和#define END }
,导致代码看起来像pascal,但当然根本不是帕斯卡在许多其他方面。
您使用其他语言编程。那么为什么假装它不是。
我想这是因为你认为它是Java你忘了删除光环对象了吗?
答案 2 :(得分:2)
任何事情都可能发生,因为重新定义语言关键字是未定义的行为。
一般来说,您应该为您正在使用的语言编写惯用代码。如果您想使用Java / C#语法,只需用这些语言编写代码。