2013-11-21 168 views
0

在这个程序中,“A的构造函数名为”打印了2次。我的疑问是,为什么“即A的构造”不与为什么构造函数没有被调用

A b = B::getA(); 

印刷而得到印有

A a; 

在这两种情况下,我们正在创造一个新的对象。

这是我的计划:

#include <iostream> 
using namespace std; 

class A 
{ 
    public: 
    A() { cout << "A's constructor called " << endl; } 
}; 

class B 
{ 
    static A a; 
    public: 
    B() { cout << "B's constructor called " << endl; } 
    static A getA() { return a; } 
}; 

A B::a; // definition of a 

int main() 
{ 
    A a; 
    A b = B::getA(); 
    return 0; 
} 

回答

3

第一个构造函数被调用在程序启动时,当内B静态A创建。

当在堆栈中分配A时,在main内调用第二个构造函数。

没有更多的调用默认的A构造函数。当你调用getA()时,将使用一个拷贝构造函数,这个编译器将提供你没有定义的拷贝构造函数。

1
A b = B::getA(); 

使用复制构造函数初始化b。你只跟踪默认的构造函数,这里没有用到。如果你想跟踪的拷贝构造函数也一样,那么你就需要提供一个:

A(A const &) { cout << "A's copy constructor called " << endl; } 
2

因为getA()调用拷贝构造函数,你还没有写,所以默认一个将被调用。

0

一个contructore获取调用了“静态甲a”和“AB :: a”的一个即静态初始化这是B类

的部件程序的以C,C++所有全局和静态的执行过程中首先初始化变量。

相关问题