C++基础 构造函数相关的问题。。。

    先贴上代码~:

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        i=1;
    }

    A(int t)
    {
        i=t;
        A();
    }

    void print()
    {
        cout<<i<<endl;
    }
private:
    int i;
};

int main()
{
    A a;
    a.print();
    A b(2);
    b.print();
}

    猜猜输出什么?

    如果你觉得是1 1的话,恭喜你,继续看下去吧。

    输出的是1 2,构造函数A(int t)中的A()函数并不能改变i的值。

    换句专业点的,构造函数不可以调用类中的其他构造函数完成初始化。虽然调用它会执行,但是无法对成员变量进行初始化,理由是两个构造函数不是同一个this指针。

    作为一个自认为C++学的还不错的人,我竟然还一直以为这样很合理。。。

    打这里例子是因为最近写的一个程序出了问题,问题的原因就是上面这个。。。

    因为这个例子,又想到如果基类中有多个构造函数,子类调用的是哪一个?才发现C++有处理的方式,即像初始化成员变量那样调用基类构造函数即可,如下:

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        i=1;
    }
    A(int t)
    {
        i=t;
    }
    int get()
    {
        return i;
    }
private:
    int i;
};

class B:public A
{
public:
    B()
    {
    }
    B(int t):A(t)
    {
    }
};

int main()
{
    B b(2);
    cout<<b.get()<<endl;;
}

    如果在同一个类中,构造函数需要完成类似的成员初始化,可以另写一个专门初始化变量的函数。

posted @ 2013-03-30 22:37  SF-_-  阅读(207)  评论(0编辑  收藏  举报