一.类的定义
1.1 格式
定义类的一般格式如下:
class 类名{
public:
公有成员列表;
protected:
保护成员列表;
private:
私有成员列表;
};
构成元素:
(1)类头(class head)
“class 类名”称为类头。
(2)类体(class body)
花括号{ }中的部分称为类体(class body).
(3)类成员表(class member list)
类体中定义了类成员表。
1.2 访问限定符
访问限定符有三种,如表1所示。
序号 | 访问限定符 | 作用 |
---|---|---|
1 | public | 表示公共的,外部可访问其成员 |
2 | protected | 表示保护的,外部不能访问其成员 |
3 | private | 表示私有的,外部不能访问其成员 |
如果在类体起始点无访问限定符,系统默认定义为private。
1.3 注意事项
1.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员初始化。
2.类中的任何数据成员也不能使用关键字extern、auto或register限定其存储类型。
3.成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员。
1.4 成员函数的定义
1.4.1 类内定义
直接在类体内定义函数。如下图所示。
1.4.2 类外定义
在类体内声明函数,在类外定义函数。类外定义函数时,使用以下格式:
返回值类型 类名::函数名(参数表)
{
……
}
其中运算符“::”称为作用域解析运算符,它指出该函数是属于哪一个类的成员函数。如下图所示:
二.类的实例化——对象
对象是类的实例。
2.1 创建方式
有两种方法创建对象。
2.1.1 静态创建
即在编译程序时创建。例如,
class CStudent
{
public:
void set_age(int val);
int get_age(void);
private:
char name[50];
int age;
};
int main(int argc, char** argv) {
CStudent stu;//直接实例化对象
return 0;
}
2.1.2 动态创建
即在程序运行时创建。使用new创建。例如:
#include <iostream>
using namespace std;
class CStudent
{
public:
void set_age(int val);
int get_age(void);
private:
char name[50];
int age;
};
int main(int argc, char** argv) {
CStudent *pstu = new CStudent();
delete pstu;
return 0;
}
2.2 对象的存储方式
有两种方式存储对象。
2.2.1 数据和函数都独立存储
当在类内定义函数时,系统会为每个对象分配各自的“数据成员和函数成员”存储空间。如下图所示。
这种方式会浪费内存空间。因为对象之间的属性(数据)有差异,但行为(函数)是一样的,这部分可以共用。
2.2.2 数据独立而函数共享存储
当在类外定义函数时,系统会为每个对象分配各自的数据区,而成员函数区为各对象共用。如下图所示: