类的定义:
class 类名
{
public:
外部接口
protected:
保护型成员
private:
私有成员
};
类的成员函数:
声明和实现:
函数原型的声明要写在类体中,原型说明了函数的参数表和返回值类型,而函数的具体实现写在类之外。具体的实现形式:
返回值类型 类名::函数成员名(参数表) //可带默认新参,在类的声明中给出
{
函数体
}
内联成员函数:
隐式声明:在类中实现
显示声明:在类中跟其他函数一样声明,在类外定义时,使用inline关键词:
inline void Clock :: showTime(){}
构造函数:
如果类中没有写构造函数则编译器会自动声明默认的构造函数,如果声明了构造函数,则不再自动生成。
对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本。
复制构造函数:
复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参时本类的对象的引用。其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定)去初始化同类的一个新对象。
如果没有定义类的复制构造函数,系统就会在必要时自动生成一个默认的赋值构造函数,这个构造函数把初始对象的每个数据成员的值都复制到新建立的对象中。
class Point{
public:
Point(Point &p);
};
Point :: point(Point &p){}
复制构造函数被调用的三种情况:
用类的一个对象去初始化该类的另一个对象:Point A(1,2); Point B(A); 调用函数时,进行形参和实参结合时:Point A(); f(A); 函数的返回值时类的对象,函数执行完成后返回调用者时
析构函数:
析构函数用来完成对象被删除前的一些清理工作,析构函数在对象的生存期即将结束的时刻被自动调用的。
析构函数不接受任何参数,但可以时虚函数。
一般来说如果希望程序在对象被删除之前的时刻自动完成某些事情而不需要借助调用函数,就可以把它们写到析构函数中。
类的组合:
类的组合就是一个类内嵌套其他类的对象最为成员的情况,它们之间的关系是一种包含与被包含的关系。
组合类构造函数定义的一般形式:(使用初始化列表)
类名 :: 类名(形参表) : 内嵌对象1(形参表), 内嵌对象2(形参表),…
Line :: Line(Point xp1, Point xp2) : p1(xp1), p2(xp2){}
前向引用声明:
是在引用未定义的累之前,将该类的名字告诉编译器,使编译器知道那是一个类名。
当使用前向引用声明时,只能使用被声明的符号(如作为函数的参数),而不能设计类的任何细节。