对象
对象只包含成员变量,不包含成员函数。所以对象所占内存空间的大小等于所有成员变量大小之和。每个对象都有自己的存储空间,相互不影响。通过类定义出来的变量就叫对象。
注意:
所有的对象都会被初始化。
使用类的成员变量和成员函数的方法
(1)对象名.成员名
(2)指针->成员名
(3)引用名.成员名
类成员访问范围
成员变量和成员函数统称为类的成员。
在类的定义中,可以通过以下访问范围关键字来说明类成员可被访问的范围:
private:私有成员,只能在成员函数内访问。
public:共有成员,可以在任何地方访问。
protected:保护成员。
如下所示:
class className
{
private:
私有属性和函数
public:
公有属性和函数
protected:
保护属性和函数
}; //必须有分号
注意:
访问范围的关键字可被写多次,且没有先后顺序。如果某个成员前面没有上述关键字,则缺省的被认为是私有成员。
设置私有成员的机制叫“隐藏”。隐藏的作用:
“隐藏”的目的是强制对成员变量的访问一定要通过成员函数进行,那么以后成员变量的类型等属性修改后,只需要更改成员函数即可。否则,所有直接访问成员变量的语句都需要修改。
成员函数的重载与参数缺省
成员函数也可以重载,也可以带缺省参数。使用缺省参数要注意避免有函数重载时的二义性,比如到底是无参还是缺省。类的成员函数和类的定义一般分开写。如下:
class CRectangle
{
public:
int w,h;
int Area(); // 成员函数仅在此处声明
int Perimeter();
void Init(int w_,int h_);
}
int CRectangle::Area() {
return w*h;
}
int CRectangle::Area() {
return 2*(w+h);
}
void CRectangle:: Init(int w_,int h_) {
w= w_; h=h_;
}
CRectangle::说明后面的函数是CRectangle类的成员函数,而非普通函数。那么一定要通过对象或对象的指针或对象的引用才能调用。
构造函数(constructor)
定义
构造函数是成员函数的一种,名字与类名相同,可以有参数,不能有返回值(void也不行),可以重载,所以可以有多个构造函数,参数个数或是类型不同。
作用
作用是对对象进行初始化,如给成员变量赋初值,并不是分配存储空间,而是存储空间已经有了,做初始化工作。构造函数执行必要的初始化工作,有了构造函数,就不必专门再写初始化函数,也不用担心忘记调用初始化函数。有时对象没有被初始化就使用,会导致程序出错。
补充:
如果定义类时没有写构造函数,则编译器生成一个默认的无参数的构造函数。
默认构造函数无参数,不做任何操作。
如果定义了构造函数,则编译器不生成默认的无参数的构造函数。
对象生成时构造函数自动被调用。对象一旦生成,就再也不能在上执行构造函数。
举例
class Complex {
private:
double real,imag;
public:
Complex(double r,double i = 0);
}
Complex::Complex(double r,double i) {
real=r;imag = i;