![]() |
#2
雪影辰风2020-02-23 13:16
|
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也是以类为基础】