C++ 多重继承类中的虚函数
首先,如果这是一个新手问题,我表示歉意,但我是初学者。 我的问题是我认为钻石问题的变种 假设我有以下课程:C++ 多重继承类中的虚函数,c++,inheritance,multiple-inheritance,virtual-functions,C++,Inheritance,Multiple Inheritance,Virtual Functions,首先,如果这是一个新手问题,我表示歉意,但我是初学者。 我的问题是我认为钻石问题的变种 假设我有以下课程: class A{ public: virtual foo();}; class B{ public: foo();}; class C{ public: foo();}; class D: public A, public B, public C{ public: foo(); }; 我的问题是,是否可以从类D调用foo(),并让虚拟函数在A、B、C和D之间运行。我已经试过
class A{ public: virtual foo();};
class B{ public: foo();};
class C{ public: foo();};
class D: public A, public B, public C{
public: foo();
};
我的问题是,是否可以从类
D
调用foo()
,并让虚拟函数在A
、B
、C
和D
之间运行。我已经试过了,但是d::foo()
函数覆盖了所有其他foo()
函数
还是只有当你制定了一个1:2的继承计划时才有可能
class A{ public: virtual foo();};
class B: public A { public: foo();};
class C: public B { public: foo();};
class D: public C { public: foo();};
我问这个问题的原因是因为我希望能够在不同的类中构造
A
、B
和C
,而不必每次都构造A
或B
或C
,但保留运行虚拟函数的可能性,而不必为每种情况调用A::foo(),B::foo()
,C::foo()
您必须实现类D::foo
显式调用A::foo()
,B::foo()
和C::foo()
。没有办法让它在每个父类上自动调用foo()
。这被称为函数重载,因此无法自动执行您想要的操作
你必须这样做:
#include <iostream>
class A {
public:
virtual void foo() {
std::cout << "foo of A\n";
}
};
class B {
public:
// virtual keyword is not needed,
// but it's to write it so that you
// remind the reader that foo is virtual
virtual void foo() {
std::cout << "foo of B\n";
}
};
class C {
public:
virtual void foo() {
std::cout << "foo of C\n";
}
};
class D : public A, public B, public C {
public:
virtual void foo() {
A::foo();
B::foo();
C::foo();
std::cout << "foo of D\n";
}
};
int main()
{
D d_object;
d_object.foo();
return 0;
}
#包括
甲级{
公众:
虚拟void foo(){
std::cout“我的问题是,是否可以从类D调用foo(),并让虚拟函数在A、B、C和D上运行?”你是什么意思?你是在问是否可以调用D.foo()并让它同时调用A.foo()、B.foo()和C.foo()?是的bstar55。我想同时调用所有这些函数。因此,调用D.foo()会调用A.foo()、B.foo(),C.foo()和D.foo()。将问题更改为“尝试”,以减少混淆。感谢提供的指针。如果我理解正确,也可以在不声明虚拟函数的情况下构造此示例?只需重载函数foo()@hadroque是的。但是你可以删除virtual
关键字并找出答案。我希望你现在明白为什么会发生这种情况。不客气。顺便说一句,我认为你问题中的-1对于初学者来说太多了,所以我投票支持平衡@hadroque.)