在构造函数C ++之前证明初始化程序列表调用的任何示例

时间:2015-06-03 11:02:09

标签: c++ constructor

我已经搜索了但仍然没有得到简单和正确的答案,下面是我的代码。

#include <iostream>
using namespace std;

class Parent
{
    private:
        int a;

    public:
        Parent():a(3) { cout << a; }
};

int main()
{
    Parent obj; 
    return 0;
}

你能添加额外的代码行,可以在构造函数之前证明或显示初始化列表调用吗?

4 个答案:

答案 0 :(得分:3)

我会稍微修改你的代码:

#include <iostream>
using namespace std;
class Parent
{
    public:
        int a;
    public:
        Parent():a(3){
            a = 4;
        }

};

int main()
{
    Parent obj;
    cout << obj.a;

    return 0;
}

输出为4,因此a已初始化为3,然后已分配4

答案 1 :(得分:1)

只需添加具有构造函数的数据成员即可打印内容。例如:

#include <iostream>
using namespace std;

struct Data {
    Data(int a) { 
        cout << "Data constructor with a=" << a << endl;
    }
};

class Parent
{
    private:
        Data a;
    public:
        Parent():a(3){
            cout << "Parent constructor" << endl;
        }
};

int main()
{
   Parent obj;
   return 0;
}

输出:

Data constructor with a=3
Parent constructor

结论:在Data的构造函数体之前调用了Parent构造函数。

答案 2 :(得分:1)

在此程序中,您没有获得变量“a”值10,这是在构造函数方法之前分配的。

 #include<iostream>
using namespace std;
class Test
{
    public:
        int a,b;
    public:
        Test():a(b){
            b=10;
        }
};

int main()
{
   Test obj;
   cout<<"a :"<<obj.a<<" b:"<<obj.b;
   return 0;
}

答案 3 :(得分:0)

最好用多个类显示:

#include <iostream>

class A
{
    public:
        A()
        {
             std::cout << "Hello World!" << std::endl;
        }
};

class B
{
    private:
        A* a;

    public:
        // Call a's constructor
        B():a(new A)
        {
             // Some code
        }

        ~B()
        {
            delete a;
        }
};

int main()
{
    B obj;
    return 0;
}