1

我想在 C++ 中尝试构造函数继承,它工作得很好。但后来我发现我不能真正从Daughter class的实例中调用方法。视觉工作室说

方法 Mother::ShowName 不可用

即使它是公开的,就我而言,它必须从子类中获得。有什么我做错了吗?

class Mother{

protected:
  char* name;

public :    
  Mother(char* _name){
      name = _name;
  }

  void ShowName(){
      cout << "my name is: " << name << endl;
  }
};


class Daughter : Mother{
public:
  Daughter(char* _name) : Mother(_name) {
  }
};

int main(){
  Daughter d1("Masha");
  d1.ShowName();

  return 0;
}
4

4 回答 4

15

class Daughter : Motherprivate继承。class默认情况下,继承就是这样。

class Daughter : public Mother就是你要找的。

于 2013-05-02T15:28:51.940 回答
4

您需要使用public继承:

class Daughter : public Mother
于 2013-05-02T15:29:57.413 回答
2

您需要使用访问说明符public继承母类。默认情况下,c++ 将其视为私有的。

于 2013-05-02T15:40:15.910 回答
2

正如 Grigore 指出的那样,您应该明确添加“public”。

仅供参考,C++ 标准地址如下:

在基类没有访问说明符的情况下,当派生类使用类键结构定义时假定为公共,而当使用类键类定义类时假定为私有。

于 2013-05-02T15:48:00.350 回答