c++继承方式
公有继承,父类的私有成员不可访问,通过父类的公有函数以及保护函数访问
私有继承,父类成员在派生类中为私有成员等。
初始化顺序先父类,再是派生类,析构刚好相反,
当用父类指针或者引用实现多态时,析构函数要声明成虚函数,不然只会调用父类的析构函数
#include
using namespace std;
class base{
private :float x;
publ...
分类:
编程语言 时间:
2014-05-12 14:16:40
阅读次数:
361
关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考《深度探索c++对象模型》c语言模拟多态主要通过函数指针实现,可以参考《Object
Orientated Programming in ANSI-C》//...
分类:
编程语言 时间:
2014-05-11 16:25:23
阅读次数:
345
如果C同时派生了基类A和基类B,那么C的对象的内存是如何分布的呢?基类指针pa和基类指针pb对这块派生类C对象的内存所存储的内容又做和解析?或者说pa和pb指向的地址是否是C对象的首地址呢?
1.继承是按照类为整体进行组织的,且如果有继承虚函数,那么将有多余的一个虚函数表指针。
2.基类指针指向派生类后,同样是按照指针强制转化原则来解析派生类对象的部分区块内容(指针截断)
3.多继承中,各个基类的指针指向派生类后,各自基类指针指向的是派生类中与本身基类相关的派生类区块首地址。...
分类:
其他好文 时间:
2014-05-11 15:10:19
阅读次数:
309
C++11中为了帮助程序员写继承结构复杂的类型,引入了虚函数描述符override
重载虚函数 就加上关键字override 这样编译器可以辅助检查是不是正确重载,如果没加这个关键字 也没什么严重的error 只是少了编译器检查的安全性...
分类:
编程语言 时间:
2014-05-11 05:25:30
阅读次数:
382
C++ Primer Plus学习笔记之虚函数
C++语言的多态性有两种类型:静态多态性和动态多态性。函数重载和运算符重载就是静态多态性的具体表现,而动态多态性是指程序运行过程中才动态的确定操作所针对的对象,它是通过虚函数实现的;
1,虚函数的概念:
一个指向基类的指针可用来指向从基类派生的任何对象,这样就可以达到一个接口多个实现的访问了;虚函数是在基类中被冠以virtual的成员函...
分类:
编程语言 时间:
2014-05-10 10:14:19
阅读次数:
290
这个是c++很基础的东西,等用到时又有点晕,翻开primer/*1.static不能声明成const和虚函数2.const
static可以初始化,但还是需要在类外定义3.类的static必须定义,并且在类外定义,把内存分配在静态存储区,如果只声明不定义出现无法解析的外部命令我猜是他是在编译时期分配...
分类:
编程语言 时间:
2014-05-09 05:59:22
阅读次数:
305
最近又重新温习了一下深度探索c++对象模型,中虚拟...
分类:
编程语言 时间:
2014-05-09 01:08:07
阅读次数:
488
以前,知道了虚函数表的低效性之后,一直尽量避免使用之。所以,在最近的工程中,所有的析构函数都不是虚函数。今天趁着还书的机会到图书馆,还书之后在 TP
分类下闲逛,偶然读到一本游戏编程书,里面说建议将存在派生的类的析构函数都设置为 virtual。例如 ParentClass 和 ChildClass...
分类:
编程语言 时间:
2014-05-08 23:21:08
阅读次数:
486
1
.虚函数假设people是man的父类,people类和man类都定义了实函数walk()people* p = new
man();p->walk();这里P执行的是people类的walk()函数。这和java语言不一样,java在这里执行的是man的walk()函数。那么C++如何实现子类...
分类:
编程语言 时间:
2014-05-08 09:30:01
阅读次数:
349
c++的两大特色是多态和模板。其中多态是通过继承和虚函数来实现的,其中虚函数是通过每个对象里面的虚表来实现的。如果这个对象的类有虚函数,那么这个类就有一张虚表,存的是每个虚函数的入口地址,而这个类的每个对象,都会有一个4字节的指针,指向这张虚表,这个就是虚指针。上面一段话很多人都知道,但是如果问普通...
分类:
编程语言 时间:
2014-05-07 10:21:02
阅读次数:
471