純虛函數與靜態成員

純虛函數


在成員函數的形參後面寫上= 0 ,則成員函數爲純虛函數。包含純虛函數的類叫做抽象類(也叫接口類),抽象類不能實例化出對象。純虛函數在派生類中重新定義以後,派生類才能實例化出對象。

#include <iostream>
#include <windows.h>
using namespace std;


class Person
{
    virtual void Display() = 0
    // 純虛函數
    {
        cout << "Person" << endl;
    }
protected :
    string _name ;          // 姓名
};

class Student : public Person
{
public:
    virtual void Display()
    {
        cout << "Student" << endl;
    }
};


int main()
{
    //Person p;//“Person”: 不能實例化抽象類
    Student s;
    s.Display();

    system("pause");
    return 0;
}

靜態數據成員


  1. 靜態數據成員爲各個對象所共享,不只是屬於某一對象成員,所有對象都可引用
  2. 靜態數據成員內存只佔一個空間
  3. 若只聲明瞭類未定義對象,則類的一般數據成員不佔空間,只有在定義對象時,才爲對象的數據成員分配空間。在爲對象分配空間的時候,不分配靜態數據成員的空間,靜態數據成員的空間在所有對象外單獨分配空間。
    只要定義了靜態數據成員,即使不定義對象,也爲靜態數據成員分配空間,可以被引用。
  4. 如果在一個函數中定義了靜態變量,在函數結束時不釋放靜態變量,仍保留其值,靜態數據成員在程序編譯時分配空間,程序結束時釋放空間,靜態數據成員在類外初始化。
  5. 靜態數據成員實現對象間的數據共享,靜態數據成員的作用域僅限於該類的作用域。

靜態成員函數


  1. 靜態成員函數是類的一部分,不是對象的一部分。類外調用類名 ::函數。
  2. 靜態成員函數爲了處理靜態數據成員
  3. 靜態成員函數沒有this指針
  4. 靜態成員函數可以直接引用本類的靜態數據成員。

代碼實現:

class   Person
{
public:
    Person()
    {
        ++_count;
    }
    static void show()//靜態成員函數
    {
        cout << "靜態成員函數" << endl;
        cout << "靜態成員變量_count:" << _count << endl;
    }
protected:
    string  _name;                     // 姓名
public:
    static   int   _count;           // 統計人的個數。
};
int  Person::_count = 0;//靜態成員變量初始化
class   Student : public   Person
{
protected:
    int  _stuNum;             // 學號
};
class Graduate : public   Student
{
protected:
    string  _seminarCourse;           // 研究科目
};
int main()
{
    Student   s1;
    Student   s2;
    Student   s3;
    Graduate  s4;
    Student::show();//靜態成員函數使用
    cout << "人數  : " << Person::_count << endl;
    Student::_count = 0;
    cout << "人數  : " << Person::_count << endl;
    system("pause");
    return 0;
}
發佈了128 篇原創文章 · 獲贊 51 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章