zoukankan      html  css  js  c++  java
  • 纯虚函数(pure virtual function )和抽象类(abstract base class)

    函数体=0的虚函数称为“纯虚函数”。包含纯虚函数的类称为“抽象类”
    
    #include <string> class Animal // This Animal is an abstract base class 
    {
    protected:
        std::string m_name;
    
    public:
        Animal(std::string name)
            : m_name(name)
        {    }
    
        std::string getName() { return m_name; }
        virtual const char* speak() = 0; // note that speak is now a pure virtual function     
    };
    
    int main() {
        Animal a; //错:抽象类不能实例化(不能定义抽象类的对象(变量))     
    }
    
    //从抽象类派生的类型如果没有继承实现所有的纯虚函数,则仍然是“抽象类” 
    #include <iostream> class Cow : public Animal
    {
    public:
        Cow(std::string name)
            : Animal(name)
        {
        }
    
        // We forgot to redefine speak     
    };
    
    int main(){
        Cow cow("Betsy"); //仍然错:因为Cow仍然是抽象类     
        std::cout << cow.getName() << " says " << cow.speak() << '
    ';
    }
    
    像下面这样实现所有纯虚函数就没问题了,Cow不是一个抽象类
    
    #include <iostream> 
    class Cow : public Animal
    {
    public:
        Cow(std::string name)
            : Animal(name)
        {
        }
    
        virtual const char* speak() { return "Moo"; }
    };
    
    int main()
    {
        Cow cow("Betsy");
        std::cout << cow.getName() << " says " << cow.speak() << '
    ';
    }
  • 相关阅读:
    C#使用反射得到属性然后创建xml文档
    android多种方式实现异步加载图片
    Linux小结
    ThinkPHP5小结
    redis小结
    Android AIDL使用详解
    广播接收器 broadcast sendOrderedBroadcast android
    Android之ContentProvider总结
    ContentProvider实例整理
    Android网络编程之Socket&Http
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10999165.html
Copyright © 2011-2022 走看看