账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C++:当前类的纯虚函数是否可以在类外定义?
    84
    0

    《C++ Primer》(第五版)第541页中说:值得注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部
    但是当我们做如下实验的时候却会发生报错:

    #include <iostream>
    
    class A {
    public:
        virtual void printClassName() { std::cout << "This is class A" << std::endl; }
    };
    
    class B : public A {
    public:
        void printClassName() = 0;
    };
    
    void B::printClassName() { std::cout << "This is class B" << std::endl; }
    
    class C : public B {
    public:
        void printClassName() override { std::cout << "This is class C" << std::endl; }
    };
    
    // void C::printClassName() 
    
    int main(int argc, char const *argv[])
    {
        A a;
        B b;
        C c;
        a.printClassName();
        b.printClassName();
        c.printClassName();
        return 0;
    }

    错误信息如下所示:

    a.cpp: In function 'int main(int, const char**)':
    a.cpp:25:7: error: cannot declare variable 'b' to be of abstract type 'B'
         B b;
           ^
    a.cpp:8:7: note:   because the following virtual functions are pure within 'B':
     class B : public A {
           ^
    a.cpp:13:6: note:       'virtual void B::printClassName()'
     void B::printClassName() { std::cout << "This is class B" << std::endl; }
          ^

    也就是说对于声明了纯虚函数的class B本身来说即使定义了纯虚函数的函数体也是没有意义的,但这显然和书中所讲不符,请问这里面有什么问题吗?还是我的理解出现了问题,谢谢大佬~

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Σ山兔子≡ 普通会员 1楼
      { "error": "Failed to generate content." }
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部