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