今天开始学习C++中的类和对象。
一、类的组成
类的组成部分有数据成员和成员函数。
1.1数据成员的命名规则
在给数据成员起名字的时候尽量遵循这种规律:m_+数据类型+名字。比如一个Student有四个数据成员,分别是姓名(类型是string)、性别(类型是char)、年龄(类型是int)、成绩(类型是double),那么用来表示这些数据成员的变量名应该分别为:m_strName、m_cGender、m_iAge、m_dScore。
1.2类的访问权限
外界对类成员的访问权限,通过访问限定符来控制,C++中的访问限定符有三种:public(公共的)、protected(受保护的)、private(私有的)。顾名思义,public就是任何人都可以访问的,被private修饰的是只有在这个类内部才可以访问,protected是只有这个类的子类(直接子类或者简介子类)或者叫做超类才能访问。这些访问限定符的含义和Java中的访问控制符的含义是相似的。如果在定义类时没有指定成员的访问权限,那么系统会默认为该成员是私有的,也就是private。一般习惯把public的部分写在前面,而把private的部分写在后面。
定义类的方式:
class Coordinate{
//只要在“public:”后面的成员都是公共的
public:
void printX(){
cout << x << endl;
}
void printY(){
cout << y << endl;
}
//只要在“private:”后面的成员都是私有的
private:
int x;
int y;
}; //结尾不要忘了加分号
二、类的实例化
类的实例化有两种方式,一种是从栈中实例化,一种是从堆中实例化。
2.1从栈中实例化对象,对象成员访问
以上面定义好的那个类为例,在栈中实例化对象的方法是:
int main(void){
Coordinate coor;//实例化一个对象
Coordinate coor_arr[20];//实例化一个对象数组
//对象成员访问
coor.x = 10;
coor.y = 20;
coor.printX();
coor.printY();
return 0;
}
从栈中实例化的对象不需要程序员手动释放内存,待对象不再使用后,系统会自动回收对象占用的内存。
2.2从堆中实例化对象,对象成员访问
从堆中实例化对象:
int main(void){
Coordinate *p = new Coordinate();//实例化一个对象
Coordinate *q = new Coordinate[20];//实例化一个对象数组
if(NULL == p){//如果内存申请失败,退出程序
return 0;
}
if(NULL == q){//如果内存申请失败,退出程序
return 0;
}
//对象成员访问
p->x = 10;
p->y = 20;
//释放内存
delete p;
delete []q;
//将指针置为空
p = NULL;
q = NULL;
return 0;
}
从堆中实例化的对象使用完后必须释放内存,否则会造成内存泄漏。