virtual 函数会动态绑定,而virtual函数的缺省参数值是静态绑定的。用一个base类型的指针p去指向一个derived类对象,通过p调用虚函数时,会动态绑定到实际所指对象中的函数;用一个derived类型的指针p2指向一个derived对象,由p2调用函数时,直接就是调用的derived中的函数,其参数值也是derived类中函数对应的参数值。
#include
using name...
分类:
编程语言 时间:
2015-06-25 12:26:23
阅读次数:
155
绝不在构造和析构过程中调用virtual函数本节有个核心的知识点就是在构造函数和析构函数中,virtual函数失去多态性。
试想一下,假设此时在构造函数和析构函数中,virtual函数没有失去多态性,会出现什么问题。我们知道构造次序吧,先构造base类部分,再构造derived部分。
那么在base类构造过程中,derived的参数都没有被初始化。virtual函数一旦具...
分类:
编程语言 时间:
2015-06-22 13:44:44
阅读次数:
155
为多态基类声明virtual析构函数本节重点大家只要明白为什么要声明析构函数为virtual函数,即声明virtual析构函数的意义。我们知道,析构函数的作用就是实现多态polymorphic。那么如果我们动态创建一个derived派生类,由基类指针接受该派生类地址。那么我们如何释放这个派生类的内存?
如下代码:class A
{
//...........
};class B:public A...
分类:
编程语言 时间:
2015-06-22 11:11:57
阅读次数:
123
class A{public: A(){print1();} //在构造函数里面调用virtual函数的做法本身不对,这里只为测试 virtual void print1(){ std::cout << "A print1" << std::endl; }};clas...
分类:
编程语言 时间:
2015-06-20 16:58:34
阅读次数:
159
本文主要讨论继承对于对象的内存分布的影响,包括:继承后类的对象的成员的布局、继承对于虚函数表的影响、virtual函数机制如何实现、运行时类型识别等。由于在C++中继承的关系比较复杂,所以本文会讨论如下的继承情况:
1)单一继承
2)多重继承
3)重复继承
4)单一虚拟继承
5)钻石型虚拟继承...
分类:
编程语言 时间:
2015-06-08 11:44:14
阅读次数:
177
不要重复定义virtual 函数中的参数缺省值,如果重复定义,会出现程序调用过程超乎常理的结果。大家看如下代码:#include
using namespace std;class Shape
{
public:
enum ShapeColor{Red,Green,Blue};
virtual void Drew(ShapeColor color=Red)...
分类:
编程语言 时间:
2015-06-02 09:20:19
阅读次数:
187
【1】什么是简单工厂模式?核心思想:用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。理解:根据条件生成不同的实例。利用多态的特性,调用同名方法,不同的实例将得到不同的结果。【2】代码示例如下:代码如下:#include #include using name...
分类:
其他好文 时间:
2015-05-28 00:20:47
阅读次数:
250
如下是一个股票交易的例子: 1 class Transaction // 交易的基类 2 { 3 public: 4 Transaction(); 5 virtual void logTransaction() const ...
分类:
其他好文 时间:
2015-05-25 16:24:33
阅读次数:
123
下面是一个用来塑模股市交易的类: derived的类的构造函数被调用,但是首先得调用基类Transaction的构造函数,但是在后面还得调用virrual函数,这个时候子类的对象的构造还没有完成,那么虚函数也就没有意思,也就可以说虚函数现在还不是虚函数,在derived class对象构造期间,对象...
分类:
其他好文 时间:
2015-05-22 13:01:45
阅读次数:
134
基本概念 虚函数是在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为: virtual 函数返回类型 函数名(参数表) {函数体}; C++中用它来实现多态性,通过指向派生类的基类指针或...
分类:
编程语言 时间:
2015-05-13 13:18:14
阅读次数:
216