非原创,在学习
5 构造、解构、拷贝语意学Semantics of Construction,Destruction, and Copy
考虑下面这个abstract base class声明:
class Abstract_base {
public:
    virtual ~Abstract_base() = 0;
    virtual void interface() const = 0;
    virtual const char*
        mumble() const { return _mumble; }
protected:
    char* _mumble;
};你看出什么问题了没有?虽然这个class被设计为一个抽象的 base class (其中有pure virtual function,使得 Abstract_base不可能拥有实体),但它仍然需要一个明确的构造函数以初始化其data member _mumble。如果没有这个初始化操作,其derived class的局部性对象_mumble将无法决定初值。例如:
class Concrete_derived : public Abstract_base {
public:
    Concrete_derived();
    // ...
};
void foo() {
    // Abstract_base::_mumble未被初始化
    Concrete_derived trouble;
    // ...
}测试

一般而言,class的 data member应该被初始化,并且只在 constructor中或是在class的其它 member functions中指定初值。其它任何操作都将破坏封装性质,使class的维护和修改更加困难。
纯虚拟函数的存在( Presence of a Pure Virtual Function )
C++新手常常很惊讶地发现,一个人竟然可以定义和调用( invoke ) 一个pure virtual function;不过它只能被静态地调用( invoked statically),不能经由虚拟机制调用。例如,你可以合法地写下这段码:
// 定义纯虚函数
// 但是只可能被静态调用
inline void
Abstract_base::interface() const {
    std::cout << "Abstract_base::interface() const has been recalled" << std::endl;
}
inline void
Concrete_derived::interface() const {
    // 调用纯虚函数
    Abstract_base::interface();
    std::cout << "Concrete_derived::interface() const has been recalled" << std::endl;
    
}这里把前面的代码一整合,子类公有继承父类,测试:

报错,子类中没有声明:virtual void interface() const = 0。给子类中加上这句究没问题了。
  













![[深度学习] GPU处理能力(TFLOPS/TOPS)](https://img-blog.csdnimg.cn/88f630201e5f4a26877de460331d60bf.png)




