关于虚函数
admin
2024-04-24 21:43:39

#include "stdafx.h"
#include   
using namespace std;

//1. 只能通过基类对象的指针的引用才能实现虚函数的特性
//2. 只需在把基类的成员函数设为 virtual,其派生类的相应的函数也会自动变为虚函数
//3. 多态有个关键之处就是一切用指向基类的指针或引用来操作对象

class A{ 
public:
 virtual void fun1(){ cout<<"A::fun1"< };

// 当将基类的成员函数定义为虚函数后,虚特性在定义它的类和之后继承它的派生类中有效,
// 即使派生类在重写该函数时并没有将它声名为虚函数,它仍然是虚函数。
class B: public A{ 
public: 
 void fun1(){ cout<<"B::fun1"< }; 
 

class C
{
public:
 void fun2(){ cout<<"C::fun2"< }; 

class D: public C
{
public:
 virtual void fun2(){ cout<<"D::fun2"< };
// 虚函数特性只对自定义之后的派生类对象有效,而对之前的基类没有任何影
// 响
class E: public D 
{
public:
 void fun2(){ cout<<"E::fun2"< };

class F: public E
{
public:
  void fun2(){ cout<<"F::fun2"< };

int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 B b;
 C c;
 D d;
 E e;
 F f;
 

A* p1 = &a;       
A* p2 = &b;                                 //p2  指向基类的指针 --->  派生类对象
 

cout <<"p1->fun1 () 的结果:";         //A::fun1 ()
p1->fun1();
 

cout <<"p2->fun1 () 的结果:";         //B::fun1 ()
p2->fun1();
 

A &ra = b;                                       // 基类的引用也可以实现虚函数多态
cout <<"A &ra fun1 () 的结果:";       //B::fun1 ()
ra.fun1();
 
// 虽然都是指向基类的指针,但是不管用,基类并没有声明为虚函数 

C* p3 = &d;
C* p4 = &e;
C* p5 = &f;

cout <<"p3->fun2 () 的结果:";         //C::fun2 ()
p3->fun2();
cout <<"p4->fun2 () 的结果:";         //C::fun2 ()
p4->fun2(); 

cout <<"p5->fun2 () 的结果:";         //C::fun2 ()
p5->fun2();
 

D* p6 = &e;
D* p7 = &f;                  // 指向基类的指针,管用了
E* p8 = &f;                  // 对 F 类来说,E 是基类,但是 E 继承于 D  已经有了影响

cout <<"p6->fun2 () 的结果:";         //E::fun2 ()
p6->fun2();
 

cout <<"p7->fun2 () 的结果:";         //F::fun2 ()
p7->fun2();
 

cout <<"p8->fun2 () 的结果:";         //F::fun2 ()
p8->fun2();
 

 cin.get();
 return 0;
}

工程实例中:
// 根据零售商创建 srv
CDataResolveSrv* CRemoteDataManage::CreateSrv(int nBrandID)
{
  CDataResolveSrv* pSrv = NULL;
  switch (nBrandID)
  {
 case retailbrand_bsd:
   pSrv = new CDataResolveBSDSrv;
   break;
 case retailbrand_abd:
  pSrv = new CDataResolveABDSrv;
  break;
 case retailbrand_yjs:
  pSrv = new CDataResolveYJSSrv;
  break;
   }
 return pSrv;

相关内容

热门资讯

把音乐厅搬进喀斯特溶洞是什么体...   近日,一场融合多元艺术形式的洞穴音乐会在贵州省修文县举行,五百余名观众在喀斯特溶洞之中,感受了一...
教师专享福利!北京这些景区免票... 新京报讯 据首都教育消息,教师节将至,北京多家景区为老师们准备了专属免票福利!这份优惠合集已整理好,...
黑茶,喝的是一种境界与健康 在专门用来喝黑茶的茶具“飘逸杯”里,黑茶茶汤看起来并不像“黑茶”这个名字那样黑黢黢的一团。 玻璃器皿...
上海旅游节大巡游花车阵容抢先看... 2026上海旅游节大巡游9月12日外滩启幕,21辆全新主题花车携手21支境内外表演方队联袂登场,邀你...
原创 8... 上周门诊来了位 62 岁的张阿姨,得糖尿病快五年了,平时管嘴特别严,糖果、点心、甜饮料一概不碰,连水...