VC++基类,派生类,虚函数 对象实现 (*****)
来源:互联网 发布:win10一直准备windows 编辑:程序博客网 时间:2024/06/06 07:36
转:http://xmurobin.blogbus.com/logs/4516167.html
有关基类,派生类,虚函数
三个结论
/////////////////////////////
假设有:
class CBase--->class CDerived
BaseFunc() DeriFunc()
Communc() Communc()
/////////////////////////
1.如果你以一个"基类之指针"指向"派生类之对象",那么经由该指针你只能够调用基类所定义的函数.
虽然我们可以令pBase实际指向Cderived对象,却因为pBase得类型,使他只能够调用BaseFunc(),不能调用DeriFunc().
CBase *pBase;
CDerived aDerive("Rukocy");
*pBase = &pDerived;//right,一个Derived对象一定是Base类,但其只能调用BaseFunc()
2.如果你以一个"派生类之指针"指向一个基类的对象",你必须先做明显的转型操作(explicit cast).这种做法很危险,不符合现实生活经验.
CDerived *pDeri;
CBase aBase("Jason");
pDeri = &aBase;//这样写有问题!一个Base的对象不一定是CDerived
3.如果基类和派生类都定义了"相同名称之成员函数",那么通过对象指针调用成员函数时,到底调用那一个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定
pBase->Communc() //永远指向CBase::Communc()
pDerived->Communc()//永远指向CDerived::Communc()
PS:从此需要满足多态性,引入了虚函数
如果你以一个基类之指针指向一个派生类之对象,那么通过设定其为虚函数,你就调用派生类的成员函数,按照孙鑫习惯性的描述:虚函数--子类有调用子类的,子类没有调用父类的!
MFC中两个十分重要的虚函数:CDocument 有关的Serialize()与和CView有关的OnDraw()
CObject--->CDocument--->CMyDoc
CMyDoc mydoc;
CMyDoc *pmydoc = new CMyDoc;
mydoc.func() == ((CDocument*)&mydoc)->func() == pmydoc->func()
但是((CDocument)mydoc).func()不同于上面三者,调用的是基础类的虚函数,并没有实现我们预期的多态,这种性质是因为其转换的是整个对象,不是指针,并且被截断了.同时,(CMyDoc)cdocument这样的转换是不允许的.
- VC++基类,派生类,虚函数 对象实现 (*****)
- 抽象类 纯虚函数 虚函数 派生类 派生类对象 基类对象 ——调用顺序,用基类调用派生类的方法
- 多继承(非虚继承)派生类对象内存结构(基类有虚函数)
- 成员函数被调用派生类对象!
- C++虚函数的陷阱--派生类对象的基类函数调用基类虚函数出错
- 派生类中的虚函数
- 派生类的基本函数的实现
- 如何实现派生类的基本函数
- C++派生类--基类构造函数,内嵌对象(子对象)的执行顺序
- C++派生类--基类构造函数,内嵌对象(子对象)的执行顺序
- C++派生类--基类构造函数,内嵌对象(子对象)的执行顺序
- 派生类的构造函数和析构函数(C++面向对象)
- C++学习(1)--基类、派生类的对象空间
- 多继承(虚继承)派生类对象内存结构
- C++中使用虚函数以及派生类来实现图形的派生后的一些图形的面积
- 二义性、虚函数、纯虚函数、虚基类、抽象类、基类对象与派生类对象之间赋值兼容原则
- 指向派生类对象的基类指针与虚函数
- 虚函数在基类与派生类对象的执行过程
- 个性优盘制作方法
- 电子线路基础 17 -----第 17 讲笔记
- ext window close() 问题
- MFC对话框程序屏蔽回车与ESC键
- 如何在Symbian中使用Http上传大文件
- VC++基类,派生类,虚函数 对象实现 (*****)
- 注册表注入
- NSString类型转换成char类型
- PreferenceActivity用法简介
- 电子线路基础 18 -----第 18 讲笔记
- 移动应用快速开发平台(三)
- oracle实现split函数
- ASP教程: ASP内建对象Server
- 3.6 文件I/O_lseek函数