1. ホーム
  2. c++

ベースクラスのメソッドにアクセスするのに、なぜ "using" キーワードを使用しなければならないのですか?

2023-09-26 22:44:05

質問

私の問題を説明するために、以下のコードを書きました。11行目をコメントすると(キーワード "using" )、コンパイラはファイルをコンパイルせず、次のようなエラーを表示します。 invalid conversion from 'char' to 'const char*' . メソッドを見ていないようです。 void action(char)Parent クラスで Son クラスに追加します。

なぜコンパイラはこのような動作をするのでしょうか?それとも何か間違ったことをしたのでしょうか?

class Parent
{
    public:
        virtual void action( const char how ){ this->action( &how ); }
        virtual void action( const char * how ) = 0;
};

class Son : public Parent
{
    public:
        using Parent::action; // Why should i write this line?
        void action( const char * how ){ printf( "Action: %c\n", *how ); }
};

int main( int argc, char** argv )
{
    Son s = Son();
    s.action( 'a' );
    return 0;
}

どのように解決するのですか?

この action は、派生クラスで宣言された action はベースクラスで宣言されたものを隠します。もし action の上に Son オブジェクトの中で宣言されたメソッドを検索します。 Son と呼ばれるものを探します。 action という名前のものを見つけて、それを使います。すでに一致する名前を見つけたので、ベース クラスのメソッドで検索することはありません。

すると、そのメソッドは呼び出しのパラメータと一致せず、エラーになります。

も参照してください。 C++のFAQ を参照してください。