C++ 通过派生类C+访问派生类的基类+;
函数C++ 通过派生类C+访问派生类的基类+;,c++,inheritance,C++,Inheritance,函数whoAmI()应该返回: I am a Man I am a Omnivore 但它只会返回两次“我是男人”: class Animal { public: string className; }; class Omnivore:public Animal { public: Omnivore() { className = "Omnivore"; } }; class Man:public Omnivore { public:
whoAmI()
应该返回:
I am a Man
I am a Omnivore
但它只会返回两次“我是男人”:
class Animal
{
public:
string className;
};
class Omnivore:public Animal
{
public:
Omnivore()
{
className = "Omnivore";
}
};
class Man:public Omnivore
{
public:
Man() {
className = "Man";
}
void whoAmI()
{
cout << "I am a " << Omnivore::className << endl;
cout << "I am a " << Omnivore::Animal::className << endl;
}
};
类动物
{
公众:
字符串类名称;
};
杂食类:公共动物
{
公众:
杂食动物
{
className=“杂食”;
}
};
班长:公共杂食者
{
公众:
男子(){
className=“Man”;
}
void whoAmI()
{
cout只有一个Animal::className
,它由Animal
的构造函数初始化为空std::string
,然后分配给杂食动物
由Omnivore
的构造函数分配,然后由Man
的构造函数分配给Man
。因此得到了相同的结果,因为它们引用了相同的数据成员
您可以让它们拥有自己的同名数据成员;但请注意,这不是一个好主意,派生类中的名称将隐藏基类中的名称
class Animal
{
public:
string className;
};
class Omnivore:public Animal
{
public:
string className;
Omnivore()
{
className = "Omnivore";
}
};
class Man:public Omnivore
{
public:
string className;
Man() {
className = "Man";
}
void whoAmI()
{
cout << "I am a " << Omnivore::className << endl; // "Omnivore"
cout << "I am a " << Omnivore::Animal::className << endl; // empty
cout << "I am a " << className << endl; // "Man"
}
};
类动物
{
公众:
字符串类名称;
};
杂食类:公共动物
{
公众:
字符串类名称;
杂食动物
{
className=“杂食”;
}
};
班长:公共杂食者
{
公众:
字符串类名称;
男子(){
className=“Man”;
}
void whoAmI()
{
cout通常是这样做的:
class Animal
{
public:
static string className() { return "Man"; };
};
class Omnivore:public Animal
{
public:
static string className() { return "Omnivore"; };
void whoAmI()
{
cout << "I am a " << Omnivore::className() << endl;
cout << "I am a " << Animal::className() << endl;
}
};
类动物
{
公众:
静态字符串className(){返回“Man”;};
};
杂食类:公共动物
{
公众:
静态字符串className(){返回“杂食”;};
void whoAmI()
{
对于给定的此是否只有一个类名
,无论您如何引用它。将类名
设为一个(虚拟或静态)函数,它就会工作。请检查。您不能覆盖数据成员。而且,whoAmI()
不会返回任何内容-它是无效的。