#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 ++,正在练习一些面向对象的编码来了解差异。
在上面的代码中,我无法从哺乳类中访问_name。
哺乳动物类是否不继承私人属性?在这种情况下,我是否必须为每个继承重新创建这些属性?
答案 0 :(得分:2)
您是正确的,无法从Animal
内访问Mammal
的私有属性。但是,如果您来自Java,这不是新的 - 它的工作原理相同。
请参阅此链接以获取示例:Do subclasses inherit private fields?
答案 1 :(得分:1)
您无法访问类的外部私有变量,这里_name是类的私有范围变量。派生类aslo无法从base访问私有范围项。要解决此问题,可以将_name声明为protected,它将访问派生类。