在base构造期间virtual函数不是virtual函数,因为构造函数首先从base构造函数开始执行,执行的时候继承类的对象并没有也就无从调用其成员函数,用以下这种方式能解决问题:
上面的做法,在要对继承类使用构造函数的时候通过参数传递给base构造函数。注意:...
分类:
其他好文 时间:
2015-05-12 23:03:34
阅读次数:
168
//---------------------------15/04/24----------------------------
//#35 考虑virtual函数以外的其他选择
{
/*
1:通常情况下对于有变动的东西,我们都会设计成virtual函数,然后由子类来继承,并重新实现,
但是,由于这个惯性思维,成了弱点。因为我们这样就没有想过别的...
分类:
编程语言 时间:
2015-04-24 19:16:44
阅读次数:
192
看下面的两个类的声明代码:class B{public: void mf(); //something to do};class D : public B{public: void mf();}; 如果有下面的调用:D x;//第一种调用B *pB = &x;pB->mf();//调用B::m...
分类:
其他好文 时间:
2015-04-21 21:59:19
阅读次数:
189
我们知道C++里 virtual函数可以用来实现多态。继承类可以实现自己的功能来覆盖基类。比如下面这段代码#include#includeusing namespace std;class BaseA{ public: BaseA(string n):name(n){} string g...
分类:
编程语言 时间:
2015-04-14 12:42:26
阅读次数:
153
因为其他的事情耽误了看书,现在将看的笔记记录下来。1 class GameCharacter {2 public:3 virtual int healthValue() const;4 }; 1. 藉由Non-Virtual Interface 手法实现 Template Meth...
分类:
编程语言 时间:
2015-03-31 12:40:21
阅读次数:
164
//---------------------------15/03/29----------------------------
//#9 绝不在构造和析构过程中调头virtual函数
{
/*
1:在构造时调用virtual函数有两个结果
1>如果基类实现了这个函数,就调用基类的函数。
...
分类:
编程语言 时间:
2015-03-30 09:26:04
阅读次数:
178
classes和templates都支持接口(interface)和多态(polymorphism)。对classes而言接口是显式的(explicit),以函数签名为中心。多态则是通过virtual函数发生于运行期。对template参数而言,接口是隐式的(implicit),奠基于有效表达式。多...
分类:
编程语言 时间:
2015-03-21 22:58:44
阅读次数:
228
Private继承意味is-implemented-in-terms of(根据某物实现出)。它通常比复合(composition)的级别低。但是当derived class需要访问protected base class的成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的。和复合...
分类:
编程语言 时间:
2015-03-21 22:51:53
阅读次数:
233
virtual函数的替代方案包括NVI手法及Strategy设计模式的多种手法。NVI手法自身是一个特殊形式的Template Method设计模式。将机能从成员函数移到class外部函数,带来的一个缺点是,非成员函数无法访问class的non-public成员。tr1::function对象的行为...
分类:
编程语言 时间:
2015-03-20 12:33:46
阅读次数:
184
条款36绝不重新定义继承而来的non-virtual函数
条款37绝不要重新定义继承而来的缺省参数值条款...
分类:
编程语言 时间:
2015-03-05 23:48:50
阅读次数:
329