C++类的介绍
如果我们要编写一个程序,用来记录学生的信息【比如:姓名、年龄、性别...】,如果我们对应所要记录的每个信息都开辟一个数组,那么这个程序显然变得冗余复杂,这是有人会想到用struct结构体定义,这是一种有效的方法,但struct毕竟存在一定的功能限制,这时我们就可以引入C++提供的一种全新的管理思想和封装模式——类(class)1.类的定义:
class 类名 {
成员变量;
成员函数;
}
成员函数在定义时,我们不必在类的定义代码中定义,而在类的外部定义,这里我们要注意一个新的符号——"::"域解析操作符
类名::函数名 {
代码块;
}
2.成员的访问类型
首先我们要明白什么是成员,想必大家都知道,不论是结构体还是类,其中所包含的变量、常量、函数、重载运算符,都是这个结构体或者类的成员。
什么是访问类型?
在类中,我们提供了三种访问类型:
public: private: protected:
这三个访问类型是如何控制的?
(1)public:
公有(公开)成员,类的外部调用、内部成员均可访问
(2)private:
私有成员,只允许类的内部成员访问
(3)protected:
保护成员,只允许类的内部成员以及派生类的成员访问(有关派生类的概念以后再解释)
E.g.
我们定义一个类:
程序代码:
class CTest { public: void show(); private: int tot; } void CTest::show() { printf("%d",tot); }
【由于这是对类的介绍,protected就不做举例,因为这需要基类与派生类的概念】
那么我们就对其进行调用,我们定义一个CTest实例,名为a,则有如下:
a.show(); //这是正确的调用
printf("%d",a.tot); //这是错误的调用
【那么具体的访问类型请大家自行实验,这里不做过多解释】
3.静态成员的引入
那么什么是静态成员呢?
在类的使用时,我们有些数据是需要做到实例间的共享,这里就需要将成员定义成静态成员,我没用static关键字来定义:
static 数据类型 成员变量;
static 数据类型 成员函数;
静态的成员变量不属于任何一个实例,我们在给静态成员变量初始化时应当以以下格式进行初始化:
数据类型 类名::变量名=值;
同样,静态的成员函数也不属于任何一个实例,我们在定义静态成员函数时要注意:静态成员函数如果想要调用本类的成员变量,只能调用静态的变量,因为静态成员是不需要实例就可以进行调用的,而动态成员需要实例才会为其分配内存空间,所以在静态成员函数中调用非静态变量会报错。
静态成员函数定义格式如下:
数据类型 类名::函数名 {
语句块;
}
我们现在已经知道了静态成员的定义了,那么究竟如何使用?我们来模拟一下:
程序代码:
#include<cstdio> using namespace std; class CTest { public: void show() { printf("%d\n",tot); } void add() { tot++; } private: static int tot; }; int CTest::tot=0; //初始化tot int main() { CTest a,b; //我们定义了两个CTest实例 a.add(); a.show(); b.show(); b.add(); a.show(); b.show(); return 0; }
以上代码的运行结果为:
1
1
2
2
由此我们就可以知道static成员是可以做到数据跨实例共享的
【那么这里就先给大家介绍到这里,C++类如果掌握的好是非常有用的,很多语言像C#、Java等都是用类来实现的,甚至包括MFC也是以类为基础】