gpt4 book ai didi

c++ - 派生类C++访问派生类的基类

转载 作者:行者123 更新时间:2023-11-30 03:26:05 25 4
gpt4 key购买 nike

whoAmI() 函数应该返回:

I am a Man
I am a Omnivore

但它只返回 "I am a Man" 两次:

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;
}
};

最佳答案

只有一个Animal::className,它被Animal的构造函数初始化为空的std::string,然后赋值给"Omnivore"Omnivore 的构造函数赋值给Man,然后由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"
}
};

关于c++ - 派生类C++访问派生类的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48567869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com