有点神奇,让我不理解了。
- C/C++ code
#include <iostream>#include <string>using namespace std;class Internet{public: Internet(string name,string address) { cout << "载入构造函数" << endl; Internet::name = name; Internet::address = address; } Internet(Internet &temp) { cout << "载入COPY 构造函数" << endl; Internet::name = temp.name; Internet::address = temp.address; } ~Internet() { cout << "载入析构函数!" << endl; }public: string name; string address;};void main(){ Internet a = Internet("中国软件开发实验室", "www.cndev-lab.com"); string q = a.name; cout << q << endl;}
显示结果:
载入构造函数
载入COPY 构造函数
载入析构函数
中国软件开发实验室
载入析构函数
问题1:www.cndev-lab.com 为什么没显示出来?
问题2:Internet("中国软件开发实验室", "www.cndev-lab.com");调用的是 无名构造 为什么还会调用拷贝函数??
- C/C++ code
#include <iostream>#include <string>using namespace std;class Internet{public: Internet(char *name,char *address) { cout << "载入构造函数" << endl; strcpy(Internet::name, name); strcpy(Internet::address, address); } Internet(Internet &temp) { cout << "载入COPY 构造函数" << endl; strcpy(Internet::name, temp.name); strcpy(Internet::address, temp.address); } ~Internet() { cout << "载入析构函数!" << endl; }public: char name[20]; char address[20];};void main(){ Internet a = Internet("中国软件开发实验室", "www.cndev-lab.com"); string q = a.name; cout << q << endl;}
问题3:以上2段程序有什么区别?
[解决办法]
问题1.你都没打印address为什么要显示
问题2.Internet a = Internet("中国软件开发实验室", "www.cndev-lab.com");
分解下:Internet temp("中国软件开发实验室", "www.cndev-lab.com");
Internet a(temp);
[解决办法]
string q = a.name; // a.name=中国软件开发实验室
cout << q << endl; //q=中国软件开发实验室
输出 中国软件开发实验室
www.cndev-lab.com 你哪里输出了?!.
[解决办法]
[解决办法]
- C/C++ code
public: string name; string address;
[解决办法]
[解决办法]
2楼给出的就是理论上的一个过程。
但为何char[]没有产生这个中间变量,就要问开发编译器的了。