写在前面
通过第一单元的梳理后现在觉得基本的框架是有了,也清晰了很多!加油,东西是死的,人是活的!
1.内联成员函数和重载成员函数
-
内敛成员函数:
(1)两种定义方式:第一种用inline进行申明,放在类内,具体的实现放在类外,另外一种是将整个函数体放在类定义内部
-
重载成员函数:
函数名字想通但是类型或者参数不一样!那就是重载了!
2. 构造函数
(1)一些概念:
- 对象需要被初始化之后再被使用!
然后关于构造函数,名字和类一毛一样,但是没有返回值,没有类型!
(2)属于成员函数的一种
**名字与类名相同**,可以有参数,**不能有返回值**(void也不行)
作用是对对象进行初始化,如给成员变量赋初值
如果定义类时没写构造函数,则编译器生成一个默认的无参数的构造函数
•默认构造函数无参数,不做任何操作
从上面观察到就构造函数而言,需要理解这几个字:对对象初始化,没有返回值
如果定义了构造函数,则编译器不生成默认的无参数的构造函数
对象生成时构造函数自动被调用。对象一旦生成,就再也不能在其上执行构造函数
一个类可以有多个构造函数
(3)需要构造函数的原因:主要就是初始化!
1) 构造函数执行必要的初始化工作,有了构造函数,就不必专门再写初始化函数,也不用担心忘记调用初始化函数。
2) 有时对象没被初始化就使用,会导致程序出错。
关于构造函数最好是利用视频课程里面的那些代码例子来加深理解,这里就不多做介绍了,只是从概念上过一遍!
3.复制构造函数
copy constructor 也叫作拷贝构造函数
下面是例子, c2就是c1的一个复制品!
class Complex {
private :
double real,imag;
};
Complex c1; //调用缺省无参构造函数
Complex c2(c1);//调用缺省的复制构造函数,将 c2 初始化成和c1一样
复制构造函数起作用的三种情况:
- 1)当用一个对象去初始化同类的另一个对象时。下面二者等价!
Complex c2(c1);
Complex c2 = c1; //初始化语句,非赋值语句 - 2)如果某函数有一个参数是类 A 的对象, 那么该函数被调用时,类A的复制构造函数将被调用。
class A {
public:
A() { };
A( A & a) {
cout << "Copy constructor called" <<endl;
}
};
自己写复制构造函数的原因!
4.类型转换构造函数
还是构造函数的调用!
感觉这些东西都是经常被笔试的过程中考过的!