纯虚函数
在成员函数的形参后面写上= 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;
}