EC++学习笔记
文章平均质量分 76
friendbkf
Bingo! macrofun is me too.
展开
-
基类的纯虚析构函数一定要予以实现
纯虚函数纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。虚函数是C++语言的精髓。含有纯虚函数的类被称为抽象类,不能被实例化生成对象,只能派生。由它派生的类的纯虚函数如果没有被实现,那么,该派生类还是个抽象类。 只有全部实现了纯虚函数的派生类才可以被实例化。纯虚函数的原创 2015-05-17 18:59:49 · 9254 阅读 · 3 评论 -
用CRTP 避免无意共用基类的静态成员变量
当两个派生类从同一个基类继承时,如果基类中有静态成员变量,那么这两个子类将会共用同一个基类的静态成员变量。有了这个理论,我们来看代码。//myClass.h#include class base {public: static int S_iNum;};class derived1 : public base {};class derived2 : public base原创 2015-06-17 10:03:25 · 785 阅读 · 0 评论 -
派生类的复制构造函数与赋值运算符
当你声明自己的拷贝函数时,也就意味着你告诉了编译器你并不喜欢缺省实现中的某些行为,比如浅拷贝。编译器仿佛被冒犯了一样,会以一种奇怪的方式回敬你:当你的代码几乎百分之百出错时,却保持沉默,甚至连一个小小的警告也没有,即使是开了最高级别的编译器警告。比如下面这个例子,输出的结果与期望大相径庭!!!//class.h#ifndef CLASS_HEAD_FILE#define CLASS原创 2015-05-17 10:25:00 · 1170 阅读 · 2 评论 -
使用多态的时,不能对 对象本身进行强制转换
先讲一句忠告:在使用多态的时候不能直接使用对象的强制转换,而应该使用指针或者引用。首先,介绍一下小知识点:class FBase {public: virtual void Set() { info = _T("FBase"); } void PrintInfo() { _tprintf(_T("%s\n"), info); }protected: TCHAR *in原创 2015-05-22 18:48:38 · 633 阅读 · 1 评论 -
非成员模板函数,混合式调用问题
Rational<int> Result = oneQuarter * 2;对于第一个实参,推导很顺利,oneQuarter的类型为 Rational<int>,所以T一定是int;但是对于第二个实参,推导就出现了问题。第二个实参是一个Int类型,编译器看到之后就傻眼了。你或许期盼着编译器会用用Rational<int>的构造函数将2隐式转换为Rational<int>对象,进而将T推导为Int。但这只是幼稚的想象而已。因为隐式转换只会发生在函数调用的时候,这时函数形参类型已经明确。所以,在模板函数实参推原创 2015-06-03 20:30:58 · 650 阅读 · 0 评论 -
不要在构造函数和析构函数中调用虚函数
读Effective C++ 条歀09:绝不在构造和析构过程中调用虚函数(Never call virtual functions during construction or destruction)首先,我们用一句在程序员中比较流行的话作为本文的开篇:如果你在基类的构造函数中调用虚函数,那么在基类构造期间,虚函数的行为像一个“实”函数。在派生类对象的基类部分构造期间,对象的类型是bas原创 2015-05-17 20:44:26 · 1909 阅读 · 0 评论