重新定义访问修饰符有什么影响?

时间:2012-12-21 00:25:15

标签: c++

为了引入类似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;
}

3 个答案:

答案 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#语法,只需用这些语言编写代码。