第一个逗比:
构造函数:
概念:首先它是成员函数,并且名字与类名相同,可以有参数,不能有返回值(void也不行)
作用:对对象进行初始化,如给成员变量赋初值
默认:如果定义类时没写构造函数,则编译器生成一个默认的无参数的构造函数,默认构造函数无参数,不做任何操作
Tips:对象生成时构造函数自动被调用。对象一旦生成,就再也不能在其上执行构造函数,一个类可以有多个构造函数
多个构造函数的例子:
又一个逗比:(拷贝)复制构造函数
概念:特殊的构造函数,只有一个参数,即对同类对象的引用。
首先,我们知道他是构造函数,所以具有前面的性质。。。
例子来了:
什么时候会用到它呢??
答:当用一个对象去初始化同类的另一个对象时;某函数有一个参数是类 A 的对象,那么该函数被调用时;函数的返回值是类A的对象时,函数返回时。
回到上个Session,问题的答案是什么呢?
答:为该类写一个复制构造函数。

概念:首先它是成员函数,并且名字与类名相同,可以有参数,不能有返回值(void也不行)

作用:对对象进行初始化,如给成员变量赋初值
默认:如果定义类时没写构造函数,则编译器生成一个默认的无参数的构造函数,默认构造函数无参数,不做任何操作
Tips:对象生成时构造函数自动被调用。对象一旦生成,就再也不能在其上执行构造函数,一个类可以有多个构造函数
多个构造函数的例子:

class Complex {
private :
double real, imag;
public:
void Set( double r, double i );
Complex(double r, double i );
Complex (double r );
Complex (Complex c1, Complex c2);
};
Complex::Complex(double r, double i)
{
real = r; imag = i;
}
Complex::Complex(double r)
{
real = r; imag = 0;
}
Complex::Complex (Complex c1, Complex c2);
{
real = c1.real+c2.real;
imag = c1.imag+c2.imag;
}
Complex c1(3) , c2 (1,0), c3(c1,c2);

概念:特殊的构造函数,只有一个参数,即对同类对象的引用。
首先,我们知道他是构造函数,所以具有前面的性质。。。
例子来了:
class Complex {
public :
<span style="white-space:pre"> </span>double real,imag;
<span style="white-space:pre"> </span>Complex(){ }
<span style="white-space:pre"> </span>Complex( const Complex & c ) {
<span style="white-space:pre"> </span>real = c.real;
<span style="white-space:pre"> </span>imag = c.imag;
<span style="white-space:pre"> </span>cout << “Copy Constructor called”;
<span style="white-space:pre"> </span>}
};
什么时候会用到它呢??
答:当用一个对象去初始化同类的另一个对象时;某函数有一个参数是类 A 的对象,那么该函数被调用时;函数的返回值是类A的对象时,函数返回时。
回到上个Session,问题的答案是什么呢?
答:为该类写一个复制构造函数。
A:: A(A& r )
{
<span style="white-space:pre"> </span>w = r.w; h = r.h;
<span style="white-space:pre"> </span>nTotalNumber ++;
<span style="white-space:pre"> </span>nTotalArea += w * h;
}