c++ 复制构造函数
来源:互联网 发布:linux系统网络不通 编辑:程序博客网 时间:2024/05/16 01:01
#include <string>#include <iostream>using namespace std;class Fruit //定义一个类,名字叫Fruit{ string name; //定义一个name成员 string colour; //定义一个colour成员public: void print() //定义一个输出名字的成员print() { cout<<colour<<" "<<name<<endl; } Fruit(const string &nst = "apple",const string &cst = "green"):name(nst),colour(cst){} //构造函数};int main(){ Fruit apple; //定义一个Fruit类对象apple Fruit apple2(apple);//调用的是我们自己定义的复制构造函数 apple.print(); apple2.print(); //你会发现输出多了个's' return 0;}
输出:
pateo@pateo-B86N53X:~/work/study$ ./maingreen applegreen applepateo@pateo-B86N53X:~/work/study$
对比下面
#include <string>#include <iostream>using namespace std;class Fruit //定义一个类,名字叫Fruit{ string name; //定义一个name成员 string colour; //定义一个colour成员public: void print() //定义一个输出名字的成员print() { cout<<colour<<" "<<name<<endl; } Fruit(const string &nst = "apple",const string &cst = "green"):name(nst),colour(cst){} //构造函数 Fruit(Fruit &aF):name(aF.name),colour(aF.colour) //这是我们自己定义的复制构造函数 { name +="s"; //让他和默认的不同 }};int main(){ Fruit apple; //定义一个Fruit类对象apple Fruit apple2(apple);//调用的是我们自己定义的复制构造函数 apple.print(); apple2.print(); //你会发现输出多了个's' return 0;}输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o mainpateo@pateo-B86N53X:~/work/study$ ./maingreen applegreen applespateo@pateo-B86N53X:~/work/study$
对比下面
#include <string>#include <iostream>using namespace std;class Fruit //定义一个类,名字叫Fruit{ string name; //定义一个name成员 string colour; //定义一个colour成员public: void print() //定义一个输出名字的成员print() { cout<<colour<<" "<<name<<endl; } Fruit(const string &nst = "apple",const string &cst = "green"):name(nst),colour(cst){} //构造函数};private: Fruit(Fruit &aF):name(aF.name),colour(aF.colour) //这是我们自己定义的复制构造函数 { name +="s"; //让他和默认的不同 }int main(){ Fruit apple; //定义一个Fruit类对象apple Fruit apple2(apple);//调用的是我们自己定义的复制构造函数 apple.print(); apple2.print(); //你会发现输出多了个's' return 0;}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
main.cc:17: error: expected unqualified-id before ‘private’
pateo@pateo-B86N53X:~/work/study$
再对比下面的
#include <string>#include <iostream>using namespace std;class Fruit //定义一个类,名字叫Fruit{ string name; //定义一个name成员 string colour; //定义一个colour成员public: void print() //定义一个输出名字的成员print() { cout<<colour<<" "<<name<<endl; } Fruit(const string &nst = "apple",const string &cst = "green"):name(nst),colour(cst){} //构造函数 Fruit(Fruit &aF):name(aF.name),colour(aF.colour) //这是我们自己定义的复制构造函数 { name +="s"; //让他和默认的不同 }};int main(){ Fruit apple; //定义一个Fruit类对象apple Fruit apple2 = apple;//调用的是我们自己定义的复制构造函数 apple.print(); apple2.print(); //你会发现输出多了个's'cout<<"------------------ "<<endl;Fruit apple3 ;apple3.print(); apple3 = apple;apple3.print(); return 0;}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o mainpateo@pateo-B86N53X:~/work/study$ ./maingreen applegreen apples------------------ green applegreen applepateo@pateo-B86N53X:~/work/study$
深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝
以上都是浅复制,下面主要解释复制函数:
#include <iostream>using namespace std;class CA{ public: CA(int b,char* cstr) { a=b; str=new char[b]; strcpy(str,cstr); } CA(const CA& C) { a=C.a; str=new char[a]; //深拷贝 if(str!=0) strcpy(str,C.str); } void Show() { cout<<str<<endl; } ~CA() { delete str; } private: int a; char *str;};int main(){ CA A(10,"Hello!"); CA B=A; B.Show(); return 0;}
其中下面为析构函数:
~CA() { delete str; }
复制构造函数在构造数组对象的使用
Sales_item primer_eds[] = { string("0-201-16487-6"); string("0-201-16487-8"); string("0-201-16487-1"); Sales_item();};
- C++: 复制构造函数
- c++-拷贝构造函数(复制构造函数)
- 复制构造函数与赋值重载(c++)
- c++primer 3/12----复制构造函数
- C++_避免调用复制构造函数
- C++(22)复制构造函数
- C++:复制构造函数___浅拷贝
- C++:复制构造函数的应用
- 【C++】This指针和复制构造函数
- 【学习C++】学习C++ -> 复制构造函数
- 【C++】拷贝构造函数之浅复制与深复制
- 构造函数 复制构造函数
- C++_浅层复制构造函数和深层复制构造函数
- 【C/C++】C++高级主题之复制构造函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 深复制-复制构造函数
- 关于复制构造函数
- 关于复制构造函数
- 自定义view的时候引用到xml里出现问题
- 【无涯契】【六】
- 纠结的QList 排序
- js 知识总结2
- VMWare虚拟机Mac系统升级后鼠标不能动的问题解决方法
- c++ 复制构造函数
- 常用正则表达式(转)
- spring+hibernate的session问题
- wed的各种前端打印方法(2)PrintArea
- protected void onDetachedFromWindow()方法的应用
- AfxMessageBox和MessageBox
- WAMPServer默认配置更改-web根目录
- Android反射机制实现与原理
- wed的各种前端打印方法(3)CSS