C++ 子类中的编辑功能
我想编辑继承的函数C++ 子类中的编辑功能,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,我想编辑继承的函数name(),并确保继承的函数info()在被child的实例调用时将调用child::name(),而不是parent::name() class parent { public: string name() { return "parent"; } void info() { cout << "This class is " << name() << endl; } }; class child
name()
,并确保继承的函数info()
在被child
的实例调用时将调用child::name()
,而不是parent::name()
class parent {
public:
string name() { return "parent"; }
void info() {
cout << "This class is " << name() << endl;
}
};
class child : public parent {
public:
string name() { return "child"; }
};
int main() {
parent p;
child c;
p.info(); // outputs "parent"
c.info(); // outputs "parent" - I want "child"
}
类父类{
公众:
字符串名(){返回“父”;}
无效信息(){
你能声明一个非多态函数吗
如果父函数的成员函数f()
不是virtual
,则它不是多态函数。因此,如果父函数的另一个函数调用此函数,则将调用的是parent::f()
如果此函数被子函数中具有完全相同签名的另一个函数f()
隐藏,并且如果此函数被子函数的另一个函数调用,则将调用的是child::f()
有趣的是,如果您直接为一个对象调用函数,那么将调用该对象的声明类型的函数
多态函数
如果要使函数具有多态性,则必须在父对象中将其定义为virtual
。假设它在子对象中被重写。在这种情况下,当调用f()
时,它将始终是为对象的真实类型定义的f()
class parent {
public:
virtual string name() { return "parent"; }
...
}
};
class child : public parent {
public:
string name() override { return "child"; }
};
使用此程序,您将获得以下结果:
This class is parent
This class is child
您已经声明了一个非多态函数
如果父函数的成员函数f()
不是virtual
,则它不是多态函数。因此,如果父函数的另一个函数调用此函数,则将调用的是parent::f()
如果此函数被子函数中具有完全相同签名的另一个函数f()
隐藏,并且如果此函数被子函数的另一个函数调用,则将调用的是child::f()
有趣的是,如果您直接为一个对象调用函数,那么将调用该对象的声明类型的函数
多态函数
如果要使函数具有多态性,则必须在父对象中将其定义为virtual
。假设它在子对象中被重写。在这种情况下,当调用f()
时,它将始终是为对象的真实类型定义的f()
class parent {
public:
virtual string name() { return "parent"; }
...
}
};
class child : public parent {
public:
string name() override { return "child"; }
};
使用此程序,您将获得以下结果:
This class is parent
This class is child
parent::name()