说说你对构造函数的理解?

构造函数:对象创建时,利用特定的值构造对象(不是构造类),将对象初始化(保证数据成员有初始值),是类的一个public 函数

①   与类同名

②   无返回值

③   声明为public

④   一个类中可以有多个构造函数(实际就是重载)

1.默认构造函数无参数;  带参数的构造函数,冒号后边是初始化列表

B(int i) : data(i);

 

Ÿ2.组合类构造函数

类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)……{}

Line(Point p1, Point p2);//类中声明
Line(Point p1, Point p2) : p1(xp1),p2(xp2){...} //声明并初始化

初始化顺序:①调用内嵌对象的构造函数(如上边Point类的构造函数)

②内嵌对象按照 组合类的声明顺序初始化(先p1,再p2)

③执行组合类自己的构造函数体

3.常量必须在构造函数的初始化列表里初始化或将其设置为static 

class A{ 
    const int size=0; //错误
    A(){
        const int size=0;//正确,常量在构造函数里初始化
    }
    static const int size=0;//正确,常量设置为static
};

 

【注意】 Test a();  和Test a;的区别  //前提声明了Test类

前者声明一个返回值为Test,名为a的函数,后者声明了Test类的一个对象(把Test当成int)

struct Test{
    Test(int){} //构造函数
    Test(){}
    void fun(){}
}; 

void main(){
    Test a(1);
    a.fun();
    Test b();
    b.fun(); //b声明为一个函数,而不是一个对象,这里编译出粗
}

 

********题**目*******分割线*********************************************************************

1.请问下面程序打印结果是?(程序员面试宝典10.3节)

class base{
private:
    int mi, mj;
public:
    base(int i) : mj(i),mi(mj){}//构造函数1,按照mi,mj声明顺序,先初始mi(mj),结果mi是随机数,再初始化mj
    base() : mj(0), mi(mj){}
    int get_i(){return mi;}
    int get_j(){return mj;}
};
void main(){
    base obj(98); //调用构造函数1
    cout<<obj.get_i() <<"\n"<<obj.get_j()<< endl;
}

输出结果第一个为随机数,第二个是98.如果想得到98,98,修改私有变量声明顺序为mj, mi

posted on 2014-06-24 16:17  zhangxh_Doris  阅读(179)  评论(0编辑  收藏  举报