2011-03-14 149 views
0
class A1{ 
public: 
    A1(){} 
    A1(const A1& rhs){} 
    void foo() {std::cout<<"Hello";} 
}; 

class A2: public A1{ 
public: 
    A2(){} 
    A2(const A2& rhs){} 
    void foo1(A1&rhs){rhs.foo();} 
    void foo2(A1 a1){a1.foo();} 
}; 

int main() 
{ 
    A2 a2; 
    A1 a1(a2); 

    a2.foo1(a1); 
    a2.foo2(a1); 
} 

A1的拷贝构造函数调用了多少次? A2的拷贝构造函数被调用了多少次?C++中的拷贝构造函数

任何人都可以教我这个吗?谢谢!

+6

为了回答,你可以在构造函数的A1的ctor“<< endl;'中放入类似'cout <<”的东西,然后运行代码自行查看。 – 2011-03-14 04:05:27

+0

@Martinho - 如果你更懒惰,你可以'static int i = 0; std :: cout << ++我<< <<第n次在A1“<< std :: endl;' – 2011-03-14 04:16:28

回答

2

谈论不重复使用变量名的代码要容易得多。

A1的复制构造函数被调用两次,并且A2根本没有。

class A1{ 
public: 
    A1(){} 
    A1(const A1& rhs){} 
    void foo() {std::cout<<"Hello";} 
}; 

class A2: public A1{ 
public: 
    A2(){} 
    A2(const A2& rhs){} 
    void foo1(A1& a1byref){a1byref.foo();} 
    void foo2(A1 a1byval){a1byval.foo();} 
}; 

int main() 
{ 
    A2 a2; 
    A1 a1(a2); // calls A1 copy constructor 

    a2.foo1(a1); 
    a2.foo2(a1); // calls A1 copy constructor 
} 
1

修改代码略有更明确的输出,我有:使用哪个3.2.5的Xcode产量

#include <iostream> 

class A1{ 
public: 
    A1(){} 
    A1(const A1& rhs) 
     { std::cout << "A1::copy_ctor\n"; } 
    void foo() 
     { std::cout << "A1::foo\n"; } 
}; 

class A2: public A1{ 
public: 
    A2(){} 
    A2(const A2& rhs){} 
    void foo1(A1&rhs) 
     { 
     std::cout << "A2::foo1\n"; 
     rhs.foo(); 
     } 
    void foo2(A1 a1) 
     { 
     std::cout << "A2::foo2\n"; 
     a1.foo(); 
     } 
}; 

int main() 
{ 
    A2 a2; 
    A1 a1(a2); 

    a2.foo1(a1); 
    a2.foo2(a1); 
} 

: “多少次”

A1::copy_ctor 
A2::foo1 
A1::foo 
A1::copy_ctor 
A2::foo2 
A1::foo