关于什么时候调用哪类构造函数
#include <iostream>using namespace std;class A{public: A() { m_a = 0; cout << "默认构造" << endl; } A(int i) { m_a = i; cout << "参数构造" << endl; } ~A() { cout << "析构" << endl; } A(const A& a) { cout << "复制构造" << endl; } A operator=(const A& a) { cout << "拷贝构造" << endl; return a; }private: int m_a;};A foo(A a){ return a;}int main(){ A a(100); A tmp; tmp = a; return 0;}参数构造//明白默认构造//明白拷贝构造//明白。。。复制构造//费解析构析构析构请按任意键继续. . .
int main(){ A a(100); A tmp = a;//这句为什么没有拷贝构造,复制构造是怎么来的。。 return 0;}A a; //缺省构造A b = a; //拷贝构造 A c(b); //拷贝构造b = a; //赋值拷贝,不叫构造。构造指实例化,说明尚未创建过。
[解决办法]
楼主,你还是立即扔了你的破教材,换本好点的吧。
能把赋值叫成构造的破书,还是不要看了。
另外,没有告诉你 A tmp = a;是构造,不会调赋值的教材,也不要买。
[解决办法]
A tmp = a; // 等价于 A tmp(a); 调用 A(A const&)
[解决办法]
#include <iostream>using namespace std;class A{public: A() { m_a = 0; cout << "默认构造" << endl; } A(int i) { m_a = i; cout << "参数构造" << endl; } ~A() { cout << "析构" << endl; } A(const A& a) { cout << "复制构造" << endl;//拷贝构造 } A operator=(const A& a) { cout << "拷贝构造" << endl;//重载赋值操作符 return a; }private: int m_a;};A foo(A a){ return a;}int main(){ A a(100); A tmp; tmp = a; return 0;}