资源描述
在类的声明中只声明函数的权限,函数的实现(函数体)可以在类外定义。,例如:课本 97页的时钟。
在C++里面,class 和struct是一样的东西,他们的区别仅仅在于class的成员默认为私有,而struct 的成员默认为公有的。所以你也可以给struct写构造函数。
///类的成员函数描述的是类的行为,也就是类中的公有类和保护类所定义的函数。
一般情况下,一个类的数据成员都应该声明为私有成员,这样,内部数结构就不会对该类以外的其余部分造成影响。
///成员函数声明:
返回值类型 类名::函数成员名(参数表)
{
函数体
}
构造函数也是类的一个成员函数,除了具有一般成员函数的特征之外,还有一些特殊的性质。构造函数的函数名与类名相同,而且没有返回值。构造函数被声明为公有函数,编译系统在编译过程中遇到对象的声明语句时,会自动生成对构造函数的调用语句。(课本103页)
构造函数的用法:如果要初始化一个类对象时,你得在类里面定义一个构造函数。构造函数是初始化对象的,在对象产生的时候自动运行的,与它相对的还有一个析构函数,在在对象释放时自动执行的。
类的继承就是新的类从已有的类那里得到已有的特性。
从已有类产生新类的过程就是类的派生。
派生类的声明:
class派生类名:继承方式 基类名1,继承方式 基类名2 ,…,继承方式 基类名n
{
派生类成员声明;
};
原有的类为基类或者父类,,产生的新类为派生类或子类。
派生类可以同时有多个基类,这种情况就是多继承,一个派生类只有以恶直接基类的情况就是单继承。
面向对象的继承和派生,其最主要的目的就是实现代码的重用和扩充。
///多态:同样的消息被不同类型的对象接收时导致完全不同的行为。消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。
拷贝构造函数:经常被称作X(X&),是一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化。它的唯一的一个参数(对象的引用)是不可变的(因为是const型的)。这个函数经常用在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
在C++中,下面三种对象需要拷贝的情况。因此,拷贝构造函数将会被调用。
1). 一个对象以值传递的方式传入函数体
2). 一个对象以值传递的方式从函数返回
3). 一个对象需要通过另外一个对象进行初始化
以上的情况需要拷贝构造函数的调用。如果在前两种情况不使用拷贝构造函数的时候,就会导致一个指针指向已经被删除的内存空间。对于第三种情况来说,初始化和赋值的不同含义是构造函数调用的原因。事实上,拷贝构造函数是由普通构造函数和赋值操作赋共同实现的。描述拷贝构造函数和赋值运算符的异同的参考资料有很多。
拷贝构造函数不可以改变它所引用的对象,其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环。
除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回的时候也同样的被调用。换句话说,你从函数返回得到的只是对象的一份拷贝。但是同样的,拷贝构造函数被正确的调用了,你不必担心。
如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会私下里为你制定一个函数来进行对象之间的位拷贝(bitwise copy)。这个隐含的拷贝构造函数简单的关联了所有的类成员。许多作者都会提及这个默认的拷贝构造函数。注意到这个隐式的拷贝构造函数和显式声明的拷贝构造函数的不同在于对于成员的关联方式。显式声明的拷贝构造函数关联的只是被实例化的类成员的缺省构造函数除非另外一个构造函数在类初始化或者在构造列表的时候被调用。
拷贝构造函数是程序更加有效率,因为它不用再构造一个对象的时候改变构造函数的参数列表。设计拷贝构造函数是一个良好的风格,即使是编译系统提供的帮助你申请内存默认拷贝构造函数。事实上,默认拷贝构造函数可以应付许多情况。
展开阅读全文