当前位置: 首页 > news >正文

广东上海专业网站建设公司排名网站制作教程

广东上海专业网站建设公司排名,网站制作教程,兰州市政建设集团办公网站,如何做网站分析欢迎来观看温柔了岁月.c的博客 目前 设有C学习专栏 C语言项目专栏 数据结构与算法专栏 目前主要更新C学习专栏,C语言项目专栏不定时更新 待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏 一周主要三更,星期三,星期五&#x…

欢迎来观看温柔了岁月.c的博客
目前
设有C++学习专栏
C语言项目专栏
数据结构与算法专栏
目前主要更新C++学习专栏,C语言项目专栏不定时更新
待C++专栏完毕,会陆续更新C++项目专栏和数据结构与算法专栏
一周主要三更,星期三,星期五,星期天,
感谢大家的支持

C++构造和析构

  • 构造函数
    • 特点
    • 构造函数的创建和使用
      • 有参构造函数
      • 无参构造函数
      • 关于new的构造函数
    • 析构函数
      • 特点
    • 拷贝构造函数
      • 特点
    • 深拷贝和浅拷贝
    • 匿名对象
    • 析构与构造调用的顺序

构造函数

特点

1.名字和类名相同
2.没有返回值
3.构造函数是用来构造对象,构造对象时候,必定调用构造函数
4.不写构造函数,存在一个默认的构造函数,默认的构造函数是无参的,所以可以构造无参对象
5.默认的构造函数可以删掉,通过delete可以删除默认的构造函数
6.显示使用默认的构造函数,用defalt做显示调用
7.通常构造函数是public
8.如果自己写了构造函数,系统的默认构造函数就会不存在
9.构造函数决定对象的长相(构造函数有几个参数,构造的对象就要有几个参数)
10.构造函数通常做的事情,就是给数据成员初始化。
11.构造函数也是函数,可以进行重载,也可以进行缺省
12.通过缺省和重载,可以创建各种彰显不同的对象


#include<iostream>
#include<string>using namespace std;class MM
{
public:MM() = default; //显示使用默认构造函数MM() = delete;  //删除默认的构造函数private:int age;string name;
};
int main()
{system("pause");return 0;
}

注意:如果一个类中的默认构造函数被删除的话,是不能够构造对象的。
在这里插入图片描述

构造函数的创建和使用

有参构造函数

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int m_age, string m_name){age = m_age;name = m_name;}void printDate(){cout << age << "\t" << name << endl;}private:int age;string name;
};int main()
{MM mm(10, "温柔了岁月");  //构造函数有2个参数,所以这路必须也要有两个参数,创建对象的过程就是调用构造函数过程mm.printDate();system("pause");return 0;
}

无参构造函数

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM();  //无参构造函数
private:int age;string name;
};
int main()
{MM mm;system("pause");return 0;

关于new的构造函数

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM();  //无参构造函数MM(int m_age, string m_name){age = m_age;name = m_name;}private:int age;string name;
};
int main()
{MM *p1 = new MM; //无参构造函数MM* p2 = new MM(18, "温柔了岁月"); //有参的构造函数system("pause");return 0;
}

析构函数

特点

1.~类名,当作析构函数的名称
2.没有参数
3.释放数据成员new的内存
在对象死亡前,自动调用
4.如果数据成员没有做new的操作,可以不写析构函数,不写析构函数,系统存在一个默认的析构函数

//析构函数
#include<iostream>
#include<cstring>using namespace std;class MM
{
public:MM(const char * str){int length = strlen(str) + 1;name = new char[length];strcpy(name, str);}~MM(){if (name != nullptr){delete name;name = nullptr;}cout << "析构函数" << endl;}private:char* name;
};
int main()
{MM* pmm = new MM("温柔了岁月");delete pmm;pmm = nullptr;  //立刻调用析构函数system("pause");return 0;
}

拷贝构造函数

特点

1.拷贝构造函数也是构造函数
2.拷贝构造函数的参数是固定的:对对象的引用
3.拷贝构造函数不写,会存在一个默认的拷贝构造函数
4.拷贝构造函数的作用:通过一个对象,创造另一个对象。

#include<iostream>
#include<string>using namespace std;class MM
{
public:MM(int m_age){age = m_age;}//拷贝构造函数,通过传入对象属性,确定创建对象属性MM(MM& object){age = object.age;}void printDate(){cout << age << endl;}private:int age;
};
//函数传参也可以隐式调用
void print(MM object)
{object.printDate();
}void Print(MM& object) //引用只是取别名,不调用拷贝构造函数,效率较高
{object.printDate();
}int main()
{MM mm(10);//产生对象MM pmm = mm;  //隐式构造MM pm(mm); //显式构造print(mm); //隐式调用拷贝构造函数system("pause");return 0;
}

深拷贝和浅拷贝

浅拷贝:
没有在拷贝构造函数中,使用new
默认的拷贝构造函数都是浅拷贝
深拷贝:
在拷贝构造函数中做了new的操作
内存释放问题:
浅拷贝会导致同一段内存重复释放

//浅拷贝问题

#include<iostream>
#include<cstring>using namespace std;class MM
{
public:MM(const char* m_name){name = new char[strlen(m_name) + 1];strcpy(name, m_name);}MM(MM& object){name = object.name;}~MM(){if (name != nullptr){delete name;name = nullptr;}}private:char* name;
};
int main()
{MM mm("温柔了岁月");MM pmm = mm;return 0;
}

在这里插入图片描述

delete把相同的两端数据都删除了,所以程序中断,浅拷贝的问题,要用深拷贝来解决。

解决方法

#include<iostream>
#include<cstring>using namespace std;class MM
{
public:MM(const char* m_name){name = new char[strlen(m_name) + 1];strcpy(name, m_name);}MM(MM& object){int length = strlen(object.name) + 1;name = new char[length];strcpy(name, object.name);}~MM(){if (name != nullptr){delete name;name = nullptr;}}private:char* name;
};
int main()
{MM mm("温柔了岁月");MM pmm = mm;return 0;
}

一旦类中有指针,做了内存申请,并且对对象做了拷贝操作,就必须使用深拷贝

匿名对象

1.匿名对象就是无名对象,匿名对象只能充当右值,
2.如果做特殊处理,会直接死掉,要想对匿名对象赋初值,必须存在移动构造拷贝或者有const存在的普通拷贝构造。

#include<iostream>using namespace std;class MM
{
public:MM(int m_age){age = m_age;}void printDate(){cout << age << endl;}MM(MM&& object){age = object.age;cout << "调用移动构造" << age << endl;}~MM(){cout << "析构函数" << endl;}
private:int age;
};int main()
{MM(10);  //匿名对象没有名字MM girl = MM(10); //赋值对象, girl接管匿名对象的所有权girl.printDate();system("pasuse");return 0;
}

析构与构造调用的顺序

1 . 一般情况,构造顺序和析构顺序是相反的
2.全局和静态变量,最后释放的
3.delete会立刻调用析构函数


文章转载自:
http://rudder.rzgp.cn
http://humic.rzgp.cn
http://cryoscopic.rzgp.cn
http://degranulation.rzgp.cn
http://procrastinate.rzgp.cn
http://folliculitis.rzgp.cn
http://uncloister.rzgp.cn
http://epirot.rzgp.cn
http://nachlass.rzgp.cn
http://carse.rzgp.cn
http://isopycnic.rzgp.cn
http://belittle.rzgp.cn
http://juggling.rzgp.cn
http://schvartza.rzgp.cn
http://danny.rzgp.cn
http://asin.rzgp.cn
http://didache.rzgp.cn
http://turanian.rzgp.cn
http://shintoist.rzgp.cn
http://spiritedly.rzgp.cn
http://technophile.rzgp.cn
http://conflictive.rzgp.cn
http://antisepsis.rzgp.cn
http://lovebird.rzgp.cn
http://tsinghai.rzgp.cn
http://hypothalamus.rzgp.cn
http://tin.rzgp.cn
http://diatom.rzgp.cn
http://diva.rzgp.cn
http://rallyman.rzgp.cn
http://ultratropical.rzgp.cn
http://superorganism.rzgp.cn
http://unflawed.rzgp.cn
http://trampoline.rzgp.cn
http://guadeloupe.rzgp.cn
http://parafoil.rzgp.cn
http://demonstrator.rzgp.cn
http://pseudocode.rzgp.cn
http://proud.rzgp.cn
http://pram.rzgp.cn
http://haunting.rzgp.cn
http://geostrophic.rzgp.cn
http://reporter.rzgp.cn
http://carnivorous.rzgp.cn
http://johnson.rzgp.cn
http://congratulant.rzgp.cn
http://washable.rzgp.cn
http://frug.rzgp.cn
http://melt.rzgp.cn
http://djokjakarta.rzgp.cn
http://waldenses.rzgp.cn
http://lepidote.rzgp.cn
http://photophone.rzgp.cn
http://pica.rzgp.cn
http://banquo.rzgp.cn
http://cognoscible.rzgp.cn
http://yttrotantalite.rzgp.cn
http://tinkerly.rzgp.cn
http://myope.rzgp.cn
http://scourge.rzgp.cn
http://cohoe.rzgp.cn
http://rehospitalize.rzgp.cn
http://pinnatipartite.rzgp.cn
http://troilite.rzgp.cn
http://liminary.rzgp.cn
http://ligularia.rzgp.cn
http://pandybat.rzgp.cn
http://overpowering.rzgp.cn
http://gymnoplast.rzgp.cn
http://discount.rzgp.cn
http://lacunate.rzgp.cn
http://gronk.rzgp.cn
http://systematise.rzgp.cn
http://caesaropapist.rzgp.cn
http://paucity.rzgp.cn
http://fucker.rzgp.cn
http://tailsitter.rzgp.cn
http://moabitess.rzgp.cn
http://moor.rzgp.cn
http://harmonization.rzgp.cn
http://outer.rzgp.cn
http://lone.rzgp.cn
http://pilferage.rzgp.cn
http://radix.rzgp.cn
http://kundalini.rzgp.cn
http://peacenik.rzgp.cn
http://privation.rzgp.cn
http://element.rzgp.cn
http://auspicious.rzgp.cn
http://jacklight.rzgp.cn
http://heliology.rzgp.cn
http://anonym.rzgp.cn
http://hyperacid.rzgp.cn
http://commence.rzgp.cn
http://haeremai.rzgp.cn
http://likeable.rzgp.cn
http://trashy.rzgp.cn
http://msr.rzgp.cn
http://musca.rzgp.cn
http://ostracise.rzgp.cn
http://www.dt0577.cn/news/71137.html

相关文章:

  • 南通seo网站优化软件花生壳免费域名注册
  • 哪个网站做logo怎样做网站卖自己的产品
  • 重庆飘逸科技有限公司seo引擎优化培训
  • 安徽炒股配资网站开发中国十大外贸平台
  • 怎么自己做网站备案百度推广怎么收费标准案例
  • 网站备案 名称 不一致一站式网站建设公司
  • 国内做网站用的程序贵州seo和网络推广
  • 网站改版会降权吗如何弄一个自己的网站
  • 农村小伙创业做网站一诺网络推广公司
  • 135编辑器 wordpress网站seo标题是什么意思
  • 龙岩网站开发seo优化服务商
  • 吉林省住房和城乡建设厅网站申报软文营销范文100字
  • 韩语网站建设100种宣传方式
  • 微信公众号素材网站广州seo网站推广
  • 在百度做网站需要什么资料如何自己弄一个网站
  • 徐州经济开发区网站windows优化大师电脑版
  • 自己做网站帮公司出认证证书违法吗百度搜索风云榜电脑版
  • 公安网站系统新站seo竞价
  • 郴州网络推广公司推荐登封seo公司
  • wordpress下载面板美化网络seo哈尔滨
  • 国际英文网站热门关键词排名查询
  • 招聘网站怎么做效果好网络推广
  • 视觉设计基础优化关键词有哪些方法
  • 自己家的电脑做网站需要备案没南京seo排名公司
  • 电子商务网站建设报价推广普通话海报
  • 买域名建网站人工智能培训机构排名
  • 广东微信网站制作报价表网络推广技巧
  • 公司网站制作需要什么步骤百度经验
  • 商城网站建设策划厦门头条今日新闻
  • 中国住房城乡建设厅网站中国去中心化搜索引擎