~软考要来了~怕怕~赶紧复习一下. ^_^
 
构造函数是C++中的重点.也是难点.
 
构造函数是用来创建对象的.而默认的构造函数是在没有提示显示的初始化的时候才会出现的.
默认的构造函数可以用于以下的声明:
Example Test_A; //Example 是类.  //这句是声明了一个对象Test_A
注意:当且仅当没有任何构造函数的时候.C++才会自动添加默认的构造函数.是不做任何的工作的.
 
这里做一个假设.假设你有提供了一个非默认的构造函数.却没有对这个构造函数进行定义.那么上面那条声明语句: Example Test_A;就会出错.出错的原因是:不禁止创建未初始化的对象.从这句话也可以看出来构造函数的用处了.说白了点构造函数是用来创建和初始人对象用的.
 
如果程序员自己定义了一个非默认的构造函数.如何让上面那条语句合法呢?
 
定义默认构造函数的二种方法:
1.       给已有的构造函数的所有参数都进行定义.
:example(int a=0,int b=0,int c=0);
2.       定义一个没有参数的构造函数.(这其实就是我们所说的函数重载了.是对C++自动加上构造函数overload)
:
example()
{
//这里面就可以对成员进行初始化了.
int a=0,b=0,c=0;
}
这种是标准的写法.当然也可以这样子写了:
example()::a(0),b(0),c(0){}  //这做写法看起来比较帅.
这两个是等同.
 
一个类中只能有一个默认的构造函数.也就是说.上面的二种方法是不可以同时进行的.
注意:构造函数没有传回数据类型,void也没有.也就是说构造函数没有声明的类型
好程序的风格:在定义默认的构造函数的时候就应该初始对象.确保有一个已知的.合理的.合法的值.
默认的构造函数通常是给所有的成员提供隐式的初始值.
 
使用以上的任何一种方法都可以声明对象变量.而且不需要进行显示的初始化.
: Example Test_A;
Example Test_B= Example ();
Example *ptr=new Example;
 
对于第1个方法:不可以这样子进行定义:
假设:a,b,c是类的私有成员.那么. Example(int a=0,int b=0,int c=0)是错误的.因为函数的参数不能够表示类的成员.而是赋值给类的成员的值.因此.函数的参数是不能够与类的成员相同.
好程序的风格:为了避免这种情况的发生.可以在类的成员前面加上m_前缀.来进行区分. m_a,m_b,m_c;
 
For Example:
Example Test_C(“concrete conglomerate”);//这个声明是调用非默认构造函数,即接受参数的构造函数;
Example Test_D();//这个声明指出:Test_D是一个返回Example对象的函数.
Example Test_E;//这个声明是调用默认的构造函数.不要用圆括号的.
 
当我们对对象进行定义时候.:Explam Test_C; 这时候缺省的构函数就会被调用.
 
<<on to C++>>这书中也写的相当的详细:
[quote start]
How to define constructor member function
In class definitions ,default constructor functions stand apart from other member functions in three ways:
1.       The default constructor function’s name is the same as the name of class
2.       The default constructor function has no return-value data type
3.       The default constructor function cannot have a parameter.
[quote end]
Now following a class:
const double pi=3.14;
class Test_A
{
     public:
double radius,length;
     Test_A (){radius=2.0;length=4.0;}
     //constructor with two parameters
     Test_A(double r,double l){ radius=r;length=l;}
     double volume(){return pi*radius*radius*length;}
}
Qustions:
1.       Is it worng?
2.       Where is the private member?
---
Next anonymous constructor and copy constructor and so on.
To be continue..