C++ C+中的继承+;;类数据也是继承的吗?
因此,如果父类C++ C+中的继承+;;类数据也是继承的吗?,c++,inheritance,C++,Inheritance,因此,如果父类Base中有一个函数greet,它是虚拟的 父类中有一个名为name的属性 现在名为Child的类继承了它,并且greet没有实现,但是name属性在Child类中发生了更改。因此,当调用Child.greet()时,它是使用孩子的名称还是使用父母的名称 非常感谢对设计决策原因的解释。它在调用时使用name的值。如果孩子在调用greet之前设置了名称,那么它将使用孩子设置的值。如果孩子在通话后将姓名设置为问候语,则会使用默认值或通话前设置的任何内容。您是否尝试查看?这个打印“hel
Base
中有一个函数greet
,它是虚拟的
父类中有一个名为name
的属性
现在名为Child
的类继承了它,并且greet
没有实现,但是name
属性在Child
类中发生了更改。因此,当调用Child.greet()
时,它是使用孩子的名称
还是使用父母的名称
非常感谢对设计决策原因的解释。它在调用时使用
name
的值。如果孩子在调用greet
之前设置了名称,那么它将使用孩子设置的值。如果孩子在通话后将姓名设置为问候语,则会使用默认值或通话前设置的任何内容。您是否尝试查看?这个打印“hello Base”。因为您调用BASE的GRUTER()方法(没有其他),它将访问BASIC的名称成员变量(通常在C++成员变量中不称为“属性”)。希望我理解你的问题
#include <iostream>
using namespace std;
class Base
{
string name;
public:
Base() : name(" Base") { }
virtual string greet()
{
return string("hello") + name;
}
};
class Child : public Base
{
// bad practice, hiding Base's name member by doing this
string name;
public:
Child() : name(" Child") { }
};
int main() {
Child* child = new Child;
// prints "hello Base"
cout << child->greet();
delete child;
// same result if calling through a Base pointer (or reference)
Base* base = new Base;
// prints "hello Base"
cout << base->greet();
delete base;
return 0;
}
#包括
使用名称空间std;
阶级基础
{
字符串名;
公众:
Base():名称(“Base”){}
虚拟字符串
{
返回字符串(“hello”)+名称;
}
};
类子:公共基
{
//不好的做法,通过这样做隐藏基地成员的名字
字符串名;
公众:
Child():名称(“Child”){}
};
int main(){
孩子*孩子=新孩子;
//打印“你好基地”
不能打招呼();
删除儿童;
//如果通过基指针(或引用)调用,则结果相同
基地*基地=新基地;
//打印“你好基地”
不能打招呼();
删除基数;
返回0;
}
[我编辑了这个问题以澄清格式。]
这里有两种可能的情况
name
属性是私有的,并在Child
中重新定义,则有两个单独的变量,每个变量都有自己的值。greet
方法只能看到自己的方法。这就是目的吗名称
属性,则只有一个属性和一个值。greet
方法返回该值无论哪种方法,答案都是一样的:
greet
方法返回Base
中的值。属性没有虚拟化。只有方法可以被虚拟化。你不能改变C++中派生类中成员的名字。我想你是说属性<代码>值<代码>已经改变了吗?无法更改属性名称。说明:name
是一个成员变量。它包含一个值
。你说的属性是什么意思?这是危险的,应该避免,你用Child::name
隐藏了Base::name
,这造成了很多混乱。