虚函数是类的成员函数,虚函数体现了运行时的多态性,编译时的多态性由函数重载和运算符重载等体现虚函数和函数重载都体现了多态性,但他们的表现形式不一样,函数重载调用根据参数的个数、参数的类型进行区分,而虚函数则是根据动态联编(运行时的多态性)来确定的。 输出:1 3 1.231 3 11.2311 13 ...
分类:
其他好文 时间:
2018-07-26 23:31:40
阅读次数:
183
1. 继承与重写run方法 我们封装了Thread类,并设置成员函数run()为纯虚函数,因此我们使用类继承,并重写run方法: 如果用多态的话,可以用vector来保存父类指针,并初始化指向子类引用,不过使用vector<Thread*>我们时常会有困惑,那就是vector作为栈上变量,其程序结束 ...
分类:
编程语言 时间:
2018-07-26 19:59:25
阅读次数:
128
析构函数在以下3种情况时被调用: 1. 对象生命周期结束被销毁时 2. delete指向对象的指针时,或者delete指向对象的基类类型的指针,而基类析构函数是虚函数 3. 对象A是对象B的成员,B的析构函数被调用时,对象A的析构函数也会被调用 类声明: 类定义: 测试1: 从运行结果可以看出,声明 ...
分类:
其他好文 时间:
2018-07-25 14:29:07
阅读次数:
120
虚函数的结束结点,标志了虚函数表的结束。 在WinXP+VS2003下,这个值是NULL。 而在Ubuntu 7.10 + Linux 2.6.22 + GCC 4.1.3下,这个值是如果1,表示还有下一个虚函数表,如果值是0,表示是最后一个虚函数表。 一般继承(无虚函数覆盖) 1)虚函数按照其声明 ...
分类:
其他好文 时间:
2018-07-24 20:53:33
阅读次数:
172
看一个静态绑定的例子: 分析: 由于test是非虚函数,对于非虚成员函数,C++是静态绑定的,即在编译时就确定了,即编译器在编译的时候就知道。空对象指针不能访问非static成员变量,但可以访问成员函数( 非虚函数 ),因为数据成员要分配内存才能访问,而函数是不需要的。 解析(1): pA->tes ...
分类:
编程语言 时间:
2018-07-24 19:26:37
阅读次数:
177
C++语言学习(十五)——C++抽象类与接口一、抽象类与接口1、抽象类简介面向对象的抽象类用于表示现实世界的抽象概念,是一种只能定义类型,不能产生对象的类(不能实例化),只能被继承并被重写相关函数,直接特征是相关函数没有完整实现。C++语言没有抽象类的概念,通过纯虚函数实现抽象类。纯虚函数是指定义原型的成员函数,C++中类如果存在纯虚函数就成为了抽象类。抽象类只能用作父类被继承,子类必须实现父类纯
分类:
编程语言 时间:
2018-07-22 20:04:12
阅读次数:
185
结论: 对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在。 如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在。 PS:以下代码均在win32控制台下运行。 e.g.1 运行后输出1。 e.g.2 运行后输出4。 e.g.3 运行后输出4。 ...
分类:
编程语言 时间:
2018-07-20 16:52:48
阅读次数:
145
C语言是面向过程的语言,C++是面向对象的语言,区分它们面向什么的重要区别在于C++比C多个类。那么在我看来,抽象就是类的升华。 一般刚学习C++的时候,抽象这个东西给人最大的感觉就是太抽象,很难理解。心里总是想着,其实这样或那样就能解决这个问题了,为什么要学这个?增加一个抽象类还增加一段代码,费事 ...
分类:
其他好文 时间:
2018-07-19 23:29:40
阅读次数:
323
原文链接:https://blog.csdn.net/neiloid/article/details/6934135 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态” ...
分类:
编程语言 时间:
2018-07-19 17:30:19
阅读次数:
125