純虛擬函式與靜態成員
阿新 • • 發佈:2019-01-26
純虛擬函式
在成員函式的形參後面寫上= 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;
}
靜態資料成員
- 靜態資料成員為各個物件所共享
- 靜態資料成員記憶體只佔一個空間
- 若只聲明瞭類未定義物件,則類的一般資料成員不佔空間,只有在定義物件時,才為物件的資料成員分配空間。在為物件分配空間的時候,不分配靜態資料成員的空間,靜態資料成員的空間在所有物件外單獨分配空間。
只要定義了靜態資料成員,即使不定義物件,也為靜態資料成員分配空間,可以被引用。 - 如果在一個函式中定義了靜態變數,在函式結束時不釋放靜態變數,仍保留其值,靜態資料成員在程式編譯時分配空間,程式結束時釋放空間,靜態資料成員在類外初始化。
- 靜態資料成員實現物件間的資料共享,靜態資料成員的作用域僅限於該類的作用域。
靜態成員函式
- 靜態成員函式是類的一部分,不是物件的一部分。類外呼叫類名 ::函式。
- 靜態成員函式為了處理靜態資料成員
- 靜態成員函式沒有this指標
- 靜態成員函式可以直接引用本類的靜態資料成員。
程式碼實現:
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;
}