3

私はC++プログラミングに不慣れで、継承の概念を読んでいます。継承の概念について疑問があります。つまり、基本クラスと派生クラスに同じデータメンバーがある場合はどうなるかということです。また、以下のように私のコードを確認してください。

#include "stdafx.h"
#include <iostream>
using namespace std;

class ClassA
{
   protected :
       int width, height;
   public :
       void set_values(int x, int y)
       {
           width = x;
           height = y;
       }
};
class ClassB : public ClassA
{
    int width, height;
    public :
        int area()
        {
            return (width * height);
        }
};

int main()
{
    ClassB Obj;
    Obj.set_values(10, 20);
    cout << Obj.area() << endl;
    return 0;
 }

上記では、基本クラスのデータメンバーと同じ名前のデータメンバーを宣言しています。set_values()派生したクラスオブジェクトを使用して関数を呼び出し、データメンバーwidthとを初期化しますheight

関数を呼び出すとarea()、適切な値を返すのではなく、ガベージ値を返すのはなぜですか。そして、それは、派生クラスの基本クラスのデータメンバーと同じ名前のデータメンバーを宣言した場合にのみ発生します。派生クラスで宣言されたデータメンバーを削除すると、正常に機能しています。では、派生クラスでの宣言の問題は何ですか?私を助けてください。

4

1 に答える 1

5

widthおよびのheightデータメンバーは、のメンバーをB 非表示(またはシャドウ)にしAます。

この場合、これらは有用な目的を果たさないため、削除する必要があります

非表示(またはシャドウ)データメンバーにアクセスする場合は、スコープ解決を使用できます。

        int area()
        {
          return (A::width * A::height);
        }
于 2013-02-20T05:47:21.580 に答える