在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C++/ C++:當前類的純虛函數(shù)是否可以在類外定義?

C++:當前類的純虛函數(shù)是否可以在類外定義?

《C++ Primer》(第五版)第541頁中說:值得注意的是,我們也可以為純虛函數(shù)提供定義,不過函數(shù)體必須定義在類的外部。
但是當我們做如下實驗的時候卻會發(fā)生報錯:

#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; }
      ^

也就是說對于聲明了純虛函數(shù)的class B本身來說即使定義了純虛函數(shù)的函數(shù)體也是沒有意義的,但這顯然和書中所講不符,請問這里面有什么問題嗎?還是我的理解出現(xiàn)了問題,謝謝大佬~

回答
編輯回答
你好胸

擁有純虛函數(shù)的類,是抽象類,不可以實例化對象;
純虛函數(shù)可以有函數(shù)體,對于使用的確是沒有意義,但是可以為子類實現(xiàn)這個純虛函數(shù)提供實現(xiàn)參考。

2018年6月3日 16:47
編輯回答
下墜

首先,擁有純虛函數(shù)的類,是一個抽象類,不可以實例化對象,所以 B b 的時候會報錯。
1和3 報錯就是這個原因。
第二個報錯的話我覺得會不會是抽象類不能繼承,但是可以被繼承

2018年8月23日 22:45