关于c ++:基类和派生类中的相同数据成员

same data members in both base and derived class

我是C++编程新手,我在阅读继承概念,我对继承概念有一个疑问:如果基类和派生类有相同的数据成员会发生什么。另外,请按以下方式填写我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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()函数来初始化数据成员widthheight

当我调用area()函数时,为什么它会返回一些垃圾值而不是返回正确的值。只有当我声明与派生类中的基类数据成员同名的数据成员时,才会发生这种情况。如果删除派生类中声明的数据成员,它将正常工作。那么派生类中的声明有什么问题呢?请帮帮我。


B中的widthheight数据成员隐藏(或隐藏)A中的数据成员。

在这种情况下,它们不起作用,应将其移除。

如果要访问隐藏(或隐藏)数据成员,可以使用范围解析:

1
2
3
4
        int area()
        {
          return (A::width * A::height);
        }