C++覆盖子类创建的对象的函数
我想知道是否可以只覆盖类中的一个函数而不创建一个全新的类。
我希望 bObj1.foo();
输出“foo!”和 bObj2.foo()
输出“foo?”,但目前它们都输出“foo!”。
#include <iostream>
using namespace std;
class B {
public:
virtual void foo() { cout << "foo!" << endl; }
};
class A {
public:
B f();
};
B A::f() {
B bObj;
return bObj;
}
class C : public A {
};
int main()
{
A aObj;
B bObj1 = aObj.f();
bObj1.foo(); // "foo!"
C cObj;
B bObj2 = cObj.f();
bObj2.foo(); // "foo?"
}
I was wondering if it's possible to override just one function in a class without creating an entirely new class.
I would like bObj1.foo();
to output "foo!" and bObj2.foo()
to output "foo?", but currently they both output "foo!".
#include <iostream>
using namespace std;
class B {
public:
virtual void foo() { cout << "foo!" << endl; }
};
class A {
public:
B f();
};
B A::f() {
B bObj;
return bObj;
}
class C : public A {
};
int main()
{
A aObj;
B bObj1 = aObj.f();
bObj1.foo(); // "foo!"
C cObj;
B bObj2 = cObj.f();
bObj2.foo(); // "foo?"
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过简单的更改获得所需的行为,其中包括将“虚拟”行为移至 A 类和 C 类。
在这里,我修改了您的应用程序以返回预期结果:
You can get the behavior that you want with a simple change, which consists in moving the "virtual" behavior to the A and C classes.
Here I modified your application to return the expected result:
为了更改虚函数,您必须创建一个新类型 - 在 C++ 中没有办法解决这个问题。然而,另一种机制 - 函数对象 - 可能会做你想做的事情。
In order to change the virtual function, you have to create a new type - there's no way around that in C++. However, an alternate mechanism - function objects - may do what you want here.