1. 程式人生 > >純虛擬函式與靜態成員

純虛擬函式與靜態成員

純虛擬函式

在成員函式的形參後面寫上= 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;
}