virtual IsEmpty() const=0中的const有什麼用?

後面加個const 表明該函數不會改名成員函數的值!該函數可以被常量對象訪問(const)。
注意 加了const 與不加const的函數是兩個不同的函數!
用個例子說明其區別:

#include <iostream>
class A
{
public:
    void empty() 
    {
        std::cout<<"call empty()\n";
    }

    void empty() const
    {
        std::cout<<"call empty() const \n";
    }
};
void main()
{
    const A a; //a常量對象,其只能訪問常量函數
    a.empty(); //訪問 empty() const; 如果A中沒有 empty() const 函數,編譯器報錯
    A b; //非常量對象
    b.empty(); //訪問 empty()
}
 
virtual void print() const = 0;
(1)=0說明它是純虛函數
(2)const表明不能修改其數據成員
 
自己記錄一下:const   和   =0   沒有關係,要分開理解   
  成員函數後面用   const   修飾,通俗的理解就是在這個函數內不能修改類的成員變量,除非那個成員變量是   mutable   的   
    
  =0表示這個成員函數是純虛函數,也就是它可以沒有定義,只有接口,由它的繼承類具體定義它的行爲,當然,你也可以給它定義缺省的函數體   
  一個類裏如果包含   =0   的純虛函數,那麼這個類就是一個抽象類,它不能具體實例化(不能創建它的對象),而只能由它去派生子類
發佈了17 篇原創文章 · 獲贊 8 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章