关于继承在c + +(公共和私人)困惑
问题描述:
#include <iostream>
#include <string>
using namespace std ;
enum COLOR { Green, Blue, White, Black, Brown } ;
class Animal {
public :
Animal() : _name("unknown") {
cout << "constructing Animal object "<< _name << endl ;
}
Animal(string n,COLOR c) : _name(n),_color(c) {
cout << "constructing Animal object "<< _name << endl ;
}
~Animal() {
cout << "destructing Animal object "<< _name << endl ;
}
void speak() const {
cout << "Animal speaks "<< endl ;
}
void move() const { }
private :
string _name;
COLOR _color ;
};
class Mammal:public Animal{
public:
Mammal(string n,COLOR c):Animal(n,c){
cout << "constructing Mammal object "<< _name << endl ;
}
~Mammal() {
cout << "destructing Animal object "<< _name << endl ;
}
void eat() const {
cout << "Mammal eat " << endl ;
}
};
我刚刚开始从java过渡到C++今天,我正在练习一些面向对象的编码,以了解差异。关于继承在c + +(公共和私人)困惑
在上面的代码中,我无法访问哺乳动物类的_name。
哺乳动物类没有继承私人属性吗?在这种情况下,我是否必须为每个继承重新创建这些属性?
答
你是正确的,你不能从Mammal
内访问Animal
的私有属性。然而,如果你来自Java,这不是新的 - 它在那里工作是一样的。
请参阅此链接的例子:Do subclasses inherit private fields?
答
,你不能访问类之外的私有变量,这里_name是类的私有范围变量。派生类也不能从基地访问专用范围项目。为了解决这个问题,你可以声明_name为protected,它将访问派生类。
您的标题与您的身体不符 - 您是否确实意味着您对C++中的继承感到困惑? –
是的,我编辑它 –
私人是私人的。如果您希望成员变量在派生类中可见,请将其放入“protected”节中。 – BitTickler