C++学习笔记 lesson4 构造函数2

来源:互联网 发布:淘宝工作室是怎么赚钱 编辑:程序博客网 时间:2024/05/16 16:08
#include<iostream> class ClassDemo{public:ClassDemo() {std::cout << "ClassDemo()...被调用" << _num << std::endl;};ClassDemo(int num):_num(num){std::cout << "ClassDemo("<< _num<<")...被调用" << std::endl;};~ClassDemo() {std::cout << "~ClassDemo()...被调用" << _num << std::endl;};ClassDemo & operator=(const ClassDemo&other){std::cout << " operator=(const ClassDemo&)...被调用" << _num << std::endl;_num = other._num;return *this;}ClassDemo(const ClassDemo&other)//拷贝构造函数 参数为引用{std::cout << "ClassDemo(ClassDemo&)...被调用" << _num << std::endl;_num = other._num;}//ClassDemo(const ClassDemo other) 无限递归,编译无法通过//将形参int GetNum() const{return _num;};private:int _num;};void F1(ClassDemo demo) //调用拷贝构造函数产生的临时对象{demo.GetNum(); //,使用的是临时对象//销毁了临时对象 }void F2(const ClassDemo&demo)  {demo.GetNum(); //只能调用const方法}int main(){ClassDemo demo = 10;//调用默认构造demo = 20; //==>demo.operator=(ClassDemo(20)) 打印出的_num是调用方的_num//调用默认构造temp//调用默认operator=(const ClassDemo&other)    //调用析构ClassDemo demo1 = demo;//ClassDemo(ClassDemo&)被调用ClassDemo   demo1(10);// ClassDemo(10)...被调用F1(demo1);   //产生了新的临时对象// ClassDemo(&)...被调用//~ClassDemo()...被调用10F2(demo1); //没有新的对象产生return 0;//~ClassDemo()...被调用10}  //空类中的方法class ClassDemo{  //默认无参构造// ClassDemo(){}  //默认析构// ~ClassDemo(){}  //默认拷贝构造// ClassDemo(const ClassDemo& other){}  //默认赋值// ClassDemo& operatot=(const CLassDemo other){}//如果有属性private:int _num;//默认拷贝构造// ClassDemo(const ClassDemo& other){num=other._num}//默认赋值// ClassDemo& operatot=(const CLassDemo other){num=other._num}};class MyString{public:MyString(){_len = 100;_str = new char[_len];}MyString(const char*str) :_len(strlen(str)){_str = new char[_len + sizeof(char)];strcpy(_str, str);}~MyString(){if (_str)delete[]_str;}MyString(const MyString & other){delete[]_str;_len = other._len;_str = new char[_len + sizeof(char)];strcpy(_str, other._str); //深拷贝 在对象中,维护了所有参数的生命周期,所有参数的生命周期和我的对象同步  //_str = other._str; //浅拷贝:直接对指针赋值 的行为,存在风险,指针的赋值被delete//_len = other._len; //没有维护参数的生命周期,给别人来维护了}char *GetString(){return _str;}private:char *_str; //有指针的情况int _len;};void test(){MyString  str("I love Mark");MyString sb = str;//拷贝构造std::cout << sb.GetString() << std::endl;sb = "I Need Mark!!";    // 产生临时对象,//对sb进行赋值 operator(MyString&)(sb._str=temp._str;_len=temp.len)//析构临时对象temp delete temp._str ==》等同于  delete sb._str(指向同一块区域,已经被释放了,野指针)std::cout << sb.GetString() << std::endl;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝便秘 肛裂了怎么办 3个月宝宝不便便怎么办 宝宝8个月不便便怎么办 宝宝在幼儿园不爱说话怎么办 广东学考考了d怎么办 上嘴唇干燥紧绷怎么办 美国大学gpa非常低怎么办 大学手机作弊通报教务处怎么办 崩坏3邮箱验证码过期怎么办 快递员被顾客恶意投诉怎么办 5岁幼儿逻辑思维差怎么办 脸一边胖一边瘦怎么办 夏天穿鞋子脚痒怎么办 脚痒怎么办但不是脚气 脚气脚趾缝烂了怎么办 凉鞋穿久了臭怎么办 运动鞋穿久了臭怎么办 体恤穿久了发臭怎么办 十七八岁青少年逆反心理怎么办 挨刚煮好的粥烫伤改怎么办? 5e的demo有水印怎么办 宝宝湿疹激素一停药复发怎么办 木工家装没事做怎么办 取票之后票丢了怎么办 补牙咬合低了点怎么办 留学生上美国网课上不了网怎么办 大四绩点不够2.0怎么办 ucas申请成绩下来后怎么办 在本校读研毕业东西怎么办 美国硕士gpa低于3.0怎么办 英国t4签证拒签怎么办 abc洗液过敏了怎么办 护士电子化注册忘记用户名怎么办 手机重力感应坏了怎么办 电脑所有驱动都删除了怎么办 毕业生没有签工作档案怎么办 澳洲两年工作签怎么办 上班一年没签劳动合同怎么办 公司拖欠工资怎么办没签劳动合同 brp丢了怎么办回国补 被怀疑假结婚该怎么办