//派生类成员函数对基类成员函数的覆盖
#include "stdafx.h"
#include<iostream>
class A
{
public:
void Show()
{
std::cout<<"A::Show\n";
}
};
class B:public A
{
public:
void Show()
{
std::cout<<"B::Show\n";
}
void Display()
{
Show();//调用派生类B的成员函数,覆盖掉继承自基类的Show()成员方法
A::Show();//调用基类A的成员函数
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
a.Show();
b.Show();
b.Display();
std::cin.get();
}
程序运行的结果:
A::Show
B::Show
B::Show
A::Show
//多重继承的副本二义性
class A
{
public:
int a;//a
};
class B:public A
{
public:
int b;//a,b
};
class C:public A
{
public:
int c;//a,c
};
class D:public B,public C
{
public:
int d;//(a,b),(a,c),d
};
int _tmain(int argc, _TCHAR* argv[])
{
D d1;
d1.a=100;//此处a具有二义性,编译器无法确定a是那个副本
d1.B::a=100;//指明访问的是通过B类间接派生的
d1.C::a=100;//指明访问的是通过C类间接派生的
}
编译结果:error C2385: ambiguous access of 'a'
若注释掉d1.a=100;则编译通过。
修改上例代码中B,C的派生方式则d1.a=100;是合法的。
class B:public virtual A
{
public:
int b;//a,b
};
class C:public virtual A
{
public:
int c;//a,c
};
评论