关于继承在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。

哺乳动物类没有继承私人属性吗?在这种情况下,我是否必须为每个继承重新创建这些属性?

+2

您的标题与您的身体不符 - 您是否确实意味着您对C++中的继承感到困惑? –

+0

是的,我编辑它 –

+4

私人是私人的。如果您希望成员变量在派生类中可见,请将其放入“protected”节中。 – BitTickler

你是正确的,你不能从Mammal内访问Animal的私有属性。然而,如果你来自Java,这不是新的 - 它在那里工作是一样的。

请参阅此链接的例子:Do subclasses inherit private fields?

,你不能访问类之外的私有变量,这里_name是类的私有范围变量。派生类也不能从基地访问专用范围项目。为了解决这个问题,你可以声明_name为protected,它将访问派生类。