#include <stdio.h>
/*
多重继承同名虚函数
如果子类实现了父类的同名函数。则父类只有一个函数。无论使用哪个子类指针来调用父类函数,都是调用同一个子类实现的函数
如果子类没有实现父类的同名函数。子类调用该函数会出错
如果一个函数重载参数一个是父类1,一个是父类,但是传入子类时会编译报错
但是对于多重继承的函数
*/
class Base1
{
public:
virtual void print()
{
printf("Base1\n");
}
};
class Base2
{
public:
virtual void print()
{
printf("Base2\n");
}
};
class ChildNoImp: public Base1, public Base2
{
public:
};
class ChildImp: public Base1, public Base2
{
public:
virtual void print()
{
printf("Child\n");
}
};
void print1(Base1* p)
{
p->print();
}
void print1(Base2* p)
{
p->print();
}
void main()
{
ChildNoImp pn;
ChildImp p;
Base1* b1;
Base2* b2;
// pn.print(); // error C2385: ambiguous access of 'print'
b1 = &pn;
b1->print();
b2 = &pn;
b2->print();
//print1(&pn); // could be 'void print1(Base2 *)' or 'void print1(Base1 *)'
print1((Base1*)&pn);
print1((Base2*)&pn);
p.print();
b1 = &p;
b1->print();
b2 = &p;
b2->print();
//print1(&p); // could be 'void print1(Base2 *)' or 'void print1(Base1 *)'
print1((Base1*)&p);
print1((Base2*)&p);
}
多重继承问题总结
最新推荐文章于 2022-04-06 11:08:31 发布