虚函数与重载函数的关系

上一篇 / 下一篇  2012-08-02 10:00:26 / 个人分类:C++

51Testing软件测试网3o y?c'w&h/A ZU n

  1、普通的函数重载是,函数的参数或参数类型必须先有所不同,返回类型也可不同。

0x9I^n+N$cP0

.rb5@3[\&[ H2B0  2、虚函数重载时,要求函数名,返回类型,参数个数,参数类型,顺序都要与基类函数原型完全相同51Testing软件测试网o9gxNKhopRa

51Testing软件测试网3s5S R%C6We

    a、当返回类型不相同,其他完全相同,则报错

it^^Ug2uF051Testing软件测试网4uo,}}Q ]

    b、函数名相同,而参数个数,参数类型,顺序不同,系统视为普通重载,失去虚函数特性51Testing软件测试网@n3bZY*u/Yez

#include<iostream>51Testing软件测试网Y![:x\*RIn5?
using namespace std;51Testing软件测试网:^ @bQ|#G,K6p G4d#o
class Base{51Testing软件测试网p9Y\:L L3x
public:
.U f2`O,Ut@H%S0 virtual void f1();
C"R Mf4Sx0 virtual void f2();51Testing软件测试网 Or2N#a-h`/b$w([2y
 virtual void f3();51Testing软件测试网8G6p7q5MlM6~U
 void f4();
oe^`dg8i IijJ0};
l9T/V}]K`-}g0class Deriverd:public Base{51Testing软件测试网:S0S9` @0`lE
public:
"j2l@p3h"fZMr)r0 virtual void f1();//是虚函数,这里的virtual可以不写51Testing软件测试网6YT QF%V'@ fO
 void f2(int x); //与Base的f2()作为普通函数重载,虚特性消失51Testing软件测试网[$hi'N[/U
 //char void f3(); //错,与基类的返回类型不同
#fu"usr^z0 void f4();51Testing软件测试网 R*Fp#q#_lO
};51Testing软件测试网 ad4}A,UM3D7a5K
void Base::f1()51Testing软件测试网'rx&[TAJ
{
y/HE.tdE#r&[0u0 cout<<"base f1()"<<endl;
0\6F'jBHo$vu7f0}
M$]U ?;dfe0void Base::f2()
eH"} ?w+^&\0{51Testing软件测试网pR['W`!V%Da8V
 cout<<"base f2()"<<endl;
l"Yk/U ^a(YA%C Ep0}
^;lyh:NF0void Base::f3()51Testing软件测试网2v'I SO I!B:F e\h
{51Testing软件测试网,JB*B Mx:LM?
 cout<<"base f3()"<<endl;51Testing软件测试网3dwRu:od
}51Testing软件测试网Wu-^z{!X~
void Base::f4()
Qn&l$G(i|$U)m0{51Testing软件测试网#me;M P J'c mj
 cout<<"base f4()"<<endl;
:iOD'_.Zv9}!p!o:y$fi.a0}
qQAEd&gd;b4s x`0void Deriverd::f1()51Testing软件测试网;x2`_#cb~"S_0A
{
4p R[z%m'c3bA0?:x0 cout <<"Deriverd f1()"<<endl;51Testing软件测试网)[:G!L_0H
}51Testing软件测试网F'A(M/V9r9w
void Deriverd::f2(int x)51Testing软件测试网 Xvi#r gZf-dg3?
{51Testing软件测试网T+[8B]7v6T;L
 cout <<"Deriverd f2(int x)"<<endl;51Testing软件测试网6f-G_+yj\V&O
}
'?Y\p?6rw0//void Deriverd::f3()
]o0w!G+y1pD)r0//{
'@:f[k/@#cR{!l|0// cout<<"Deriverd f3()"<<endl;51Testing软件测试网5PX#Rq(o
//}
a5D3P1|e8\C6d!j0void Deriverd::f4()
iz'j4@4l1}WrM l9]r0{51Testing软件测试网-[0O2C3q.yx
 cout <<"Deriverd f4()"<<endl;51Testing软件测试网jSr^5y a.f
}51Testing软件测试网0rA'zO8H$E6M aj
int main()
NP ?|[*CA0{51Testing软件测试网RU/A}J,W
 Base b,*bp;
m+O U1}}t0 Deriverd d;51Testing软件测试网7]Ic`(BZ
 bp=&d;
0_7x?mhg{0 bp->f1();51Testing软件测试网 `d+Z5A1XjI
 bp->f2();51Testing软件测试网ZS.@}@-^F3o5U
 bp->f3();
5Nfp.P-YMx0 bp->f4();
g+PDS kb u0 return 0;51Testing软件测试网LS JT3tcg@~{
}

51Testing软件测试网?#xcp*x4Ba6U4wZ


TAG:

 

评分:0

我来说两句

Open Toolbar