C++中的多态、虚函数、父类子类_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++中的多态、虚函数、父类子类

C++中的多态、虚函数、父类子类

 2011/10/31 8:28:56  lunan  http://lunan.iteye.com  我要评论(0)
  • 摘要:/*C++中的多态、虚函数、父类子类1、如果你期望衍生类别重新定义一个成员函数,那么你应该在基础类别中把此函数设为virtual。2、以单一指令唤起不同函数,这种性质称为Polymorphism,意思是"theabilitytoassumemanyforms",也就是多态。3、既然抽象类别中的虚拟函数不打算被调用,我们就不应该定义它,应该把它设为纯虚拟函数(在函数声明之后加上"=0"即可)4、抽象类别不能产生出对象实体,但是我们可以拥有指向抽象类别之指针,以便于操作抽象类别的各个衍生类别
  • 标签:函数 c++
/*
C++中的多态、虚函数、父类子类

1、 如果你期望衍生类别重新定义一个成员函数,那么你应该在基础类别中把此函 数设为virtual。
2、以单一指令唤起不同函数,这种性质称为Polymorphism,意思是"the ability to  assume many forms",也就是多态。
3、既然抽象类别中的虚拟函数不打算被调用,我们就不应该定义它,应该把它设为纯虚拟函数(在函数声明之后加上"=0" 即可)
4、抽象类别不能产生出对象实体,但是我们可以拥有指向抽象类别之指针,以便于操作抽象类别的各个衍生类别。
虚拟函数衍生下去仍为虚拟函数,而且可以省略virtual 关键词。
*/

#include "stdafx.h"
#include <iostream> 

using namespace std; 

class A

public: 
virtual void Serialize() { cout<<"A::Serial() //n";  }    
}; 

class B: public A

public : 
int m_data1 ; 
void func()

cout<<"B::func()"<<endl; 
Serialize(); 


virtual void Serialize() { cout<<"B::Serial() //n";  } 
void OutputName(){  cout<<"B /n/n";  }
}; 

class C : public B

public: 
int m_data2; 
virtual void Serialize(){  cout<<"C::Serialize() //n";  } 
void OutputName(){ cout<<"C /n/n";  }
}; 

int main(void){ 

C myDoc ; 
C* pMyDoc = new C(); 

cout<<"#1 testing"<<endl; 
myDoc.func(); 
   
//由于子类C中已经重写了父类的Serialize(),所以都会最终落实到对子类C::Serialize()的调用
cout<<"#2 testing"<<endl; 
((B*)(&myDoc))->func(); 

cout<<"#3 testing"<<endl; 
pMyDoc->func(); 

//这里直接把C类型对象upcast强制转化为了B类型对象(对象切割)。
cout<<"#4 testing"<<endl; 
((B)myDoc).func(); 
   
//虚函数 调用
A* array[]={ 
new A(), 
new B(), 
new C() 
}; 
int arraySize = sizeof(array)/sizeof(*array[0]);    //3 
cout<<arraySize<<endl;               

for(int i=0 ; i < arraySize ; i++) 
array[i]->Serialize(); 


B* cb;
C cc;

cb = &cc;
cb->OutputName();
cc.OutputName();

return 0;  

发表评论
用户名: 匿名