3

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;
}
4

3 に答える 3

9
class B : public A {};

expected '{' before ':' token
expected unqualified-id before ':' token
expected class-name before ':' token

于 2012-12-21T00:28:01.473 に答える
3

すでに述べた構文エラーの結果は別として。これを行うと、他の人が混乱するでしょう。昔は、人々はPascalでプログラムしていましたが、C use #define BEGIN {andに移行すると#define END }、そのようなコードはPascalのように見えましたが、もちろん、他の多くの点ではPascalとはまったく異なりました。

あなたは別の言語でプログラミングしています。では、なぜそうではないふりをするのですか。

ハローオブジェクトも削除し忘れたのはJavaだと思っているからだと思いますか?

于 2012-12-21T00:31:13.917 に答える
2

言語キーワードの再定義は未定義の動作であるため、何かが発生する可能性があります。

一般的に言えば、使用している言語の慣用的なコードを書く必要があります。Java / C#構文を使用する場合は、それらの言語でコードを記述してください。

于 2012-12-21T00:32:51.953 に答える