64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class t{
public :
virtual void show(){
cout<<"t"<<endl;}};
class tt:public t{
public :
void show(){
cout<<"tt"<<endl;}
virtual void show(int n){// 1,如果不自己弄成虚的话 ,
cout<<n<<" 2tt"<<endl;}
};
class ttt:public tt{
public :
void show(int n){
cout<<n<<" 3tt"<<endl;}
};
int main(){
tt t2;
ttt t3;
t*p=&t3;
p->show();
tt*pp=&t3;
pp->show(5);//(接上)输出的是2tt,也就是tt类
return 0;
}
class Parent
{
public:
virtual void Func(int);
}
class ChildOverride:public Parent
{
public:
void Func(int, int);
}//情形一,重载
class ChildOverlay:public Parent
{
public:
void Func(int);//这里可以不明确写出virtual关键词,但编译器认为virtual void Func(int);完全一样.
}//情形二,覆盖
在我看来,类ChildOverride在内存中其实包含两个函数virtual void Parent::Func(int)和void ChildOverride::Func(int,int),我认为这相当于就是函数重载,只是不那么直观;而类ChildOverlay经过编译器的解释后,在内存中只有void ChildOverlay::Func(int)一个函数在虚表(virtual table)中,这个我才认为是覆盖。不知我现在说清楚了没~