理由:
抽象类是空的,没有非静态成员数据。比有状态的基类更稳定。
反例:
含有数据的类,只知道Shape会出现在某个地方:
classShape{//bad:interfaceclassloadedwithdatapublic:Pointcenter()const{turnc;}virtualvoiddraw()const;virtualvoidrotate(int);//...private:Pointc;vectorPointoutline;Colorcol;};这会要求所有继承的类去计算center。可能center从来不会用到。同样的,不是所有形状Shape都有颜色Color,比如那些以点组成的形状。
用抽象类会更好:
classShape{//better:Shapeisapuinterfacepublic:virtualPointcenter()const=0;//puvirtualfunctionsvirtualvoiddraw()const=0;virtualvoidrotate(int)=0;//...//...nodatamembers...//...virtual~Shape()=default;};强化:
(简单)如果一个叫C的类,它的指针或引用赋值给C的基类指针或引用,而基类又有成员数据。警告。
C++核心指南是由C++创始人BjarneStroustrup和ISO/ANSIC++标准委员会秘书HerbSutter领导开发的关于如何正确高效使用C++的在线文档。就像C++语言本身一样,这些指南是许多组织中许多人多年讨论和设计的结果。
C++核心指南是由C++创始人BjarneStroustrup和ISO/ANSIC++标准委员会秘书HerbSutter领导开发的关于如何正确高效使用C++的在线文档。就像C++语言本身一样,这些指南是许多组织中许多人多年讨论和设计的结果。
kimim