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

做网站的公司苏州百度如何优化排名靠前

做网站的公司苏州,百度如何优化排名靠前,建设银行网上银行登录,网站建设的需求分析报告文章目录 1.类的默认成员函数2.构造函数 1.类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前…

文章目录

  • 1.类的默认成员函数
  • 2.构造函数


1.类的默认成员函数

默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解一下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后面再讲解。默认成员函数很重要,也比较复杂,我们要从两个方面去学习:

  • 第一:我们不写时,编译器默认生成的函数行为是什么,是否满足我们的需求。

  • 第二:编译器默认生成的函数不满足我们的需求,我们需要自己实现,那么如何自己实现?

94f52ac11a40feabfa6b547ba22882fe


2.构造函数

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时,空间就开好了),而是对象实例化时初始化对象。构造函数的本质是要替代我们以前StackDate类中写的Init函数的功能,构造函数自动调用的特点就完美的替代的了Init

构造函数的特点:

  1. 函数名与类名相同。

  2. 无返回值。 (返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)

  3. 对象实例化时系统会自动调用对应的构造函数。

  4. 构造函数可以重载。

  5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。

  6. 无参构造函数、全缺省构造函数、我们不写构造时编译器默认生成的构造函数,都叫做默认构造函数。但是这三个函数有且只有一个存在,不能同时存在。

    无参构造函数和全缺省构造函数虽然构成函数重载,但是调用时会存在歧义。要注意很多同学会认为默认构造函数是编译器默认生成那个叫默认构造,实际上无参构造函数、全缺省构造函数也是默认构造,总结一下就是不传实参就可以调用的构造就叫默认构造。

  7. 我们不写,编译器默认生成的构造,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。对于自定义类型成员变量,要求调用这个成员变量的默认构造函数初始化。如果这个成员变量,没有默认构造函数,那么就会报错,我们要初始化这个成员变量,需要用初始化列表才能解决,初始化列表,我们下个章节再细细讲解。

说明:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的原生数据类型。

如:int/char/double/指针等,自定义类型就是我们使用class/struct等关键字自己定义的类型。

#include<iostream>
using namespace std;class Date
{
public:// 1.无参构造函数Date(){_year = 1;_month = 1;_day = 1;}// 2.带参构造函数Date(int year, int month, int day){_year = year;_month = month;_day = day;}//无参构造函数,全缺省构造函数,不写构造时编译器默认生成的构造函数,都叫做默认构造函数。但是这三个函数有且只有一个存在,不能同时存在。/* 3.全缺省构造函数Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}*/void Print(){cout << _year << "/" << _month << "/" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{// 如果留下三个构造中的第二个带参构造,第一个和第三个注释掉// 编译报错:error C2512: “Date”: 没有合适的默认构造函数可用Date d1; // 调用无参构造函数Date d2(2025, 1, 1); // 调用带参的构造函数// 注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则编译器无法区分这里是函数声明还是实例化对象//Date d3();// warning C4930: “Date d3(void)”: 未调用原型函数(是否是有意用变量定义的?)d1.Print();//1/1/1d2.Print();//2025/1/1return 0;
}
class Date
{
public:/*// 如果用户显式定义了构造函数,编译器将不再生成Date(int year, int month, int day){_year = year;_month = month;_day = day;}*/void Print(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{// 将Date类中构造函数屏蔽后,代码可以通过编译,因为编译器生成了一个无参的默认构造函数// 将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再生成// 无参构造函数,放开后报错:error C2512: “Date”: 没有合适的默认构造函数可用Date d1;Date d2;//下面是编译器自动生成的值d1.Print();//-858993460--858993460--858993460//d2.Print;//会报错return 0;
}
class Date
{
public:void Print(){cout << _year << "-" << _month << "-" << _day << endl;}private:// 内置类型// C++11支持,这里不是初始化,因为这里只是声明// 这里给的是默认的缺省值,给编译器生成默认构造函数用int _year=1;int _month=1;int _day=1;// 自定义类型//Stack _st;
};int main()
{// 将Date类中构造函数屏蔽后,代码可以通过编译,因为编译器生成了一个无参的默认构造函数// 将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再生成// 无参构造函数,放开后报错:error C2512: “Date”: 没有合适的默认构造函数可用Date d1;Date d2;//下面是编译器自动生成的值d1.Print();//1-1-1//d2.Print;//会报错return 0;
}

1、一般情况下,有内置类型成员,就需要自己写构造函数,不能用编译器自己生成的。

2、全部都是自定义类型成员,可以考虑让编译器自己生成

下面看两个代码的区别:

class Date
{
public:void Print(){cout << _year << "/" << _month << "/" << _day << endl;}private:int _year;int _month;int _day;
};typedef int STDataType;
class Stack
{
public:Stack(int n = 4){_a = (STDataType*)malloc(sizeof(STDataType) * n);if (nullptr == _a){perror("malloc申请空间失败");return;}_capacity = n;_top = 0;}private:STDataType* _a;size_t _capacity;size_t _top;
};// 两个栈实现一个队列
class MyQueue
{
private:Stack _pushst;Stack _popst;int _size;
};int main()
{// 不传实参调用构造,都叫默认构造Date d1;d1.Print();Stack st1;MyQueue mq;return 0;
}

可以运行。

class Date
{
public:void Print(){cout << _year << "/" << _month << "/" << _day << endl;}private:int _year;int _month;int _day;
};typedef int STDataType;
class Stack
{
public:Stack(int n){_a = (STDataType*)malloc(sizeof(STDataType) * n);if (nullptr == _a){perror("malloc申请空间失败");return;}_capacity = n;_top = 0;}private:STDataType* _a;size_t _capacity;size_t _top;
};// 两个栈实现一个队列
class MyQueue
{
private:Stack _pushst;Stack _popst;int _size;
};int main()
{// 不传实参调用构造,都叫默认构造Date d1;d1.Print();Stack st1;MyQueue mq;return 0;
}

运行报错。

这两段代码唯一的区别就是第19行,一个是Stack(int n = 4)一个是Stack(int n)

那么为什么前者可以,后者不行呢?

因为前者是无参构造函数

后者是带参构造函数

前面说到对于自定义类型成员变量,要求调用这个成员变量的默认构造函数初始化。如果这个成员变量,没有默认构造函数,那么就会报错

无参构造函数、全缺省构造函数、我们不写构造时编译器默认生成的构造函数,都叫做默认构造函数。

而带参构造函数不是默认构造函数,所以会报错。


文章转载自:
http://minitype.gtqx.cn
http://cathar.gtqx.cn
http://godwin.gtqx.cn
http://norwards.gtqx.cn
http://alcheringa.gtqx.cn
http://dae.gtqx.cn
http://negrophil.gtqx.cn
http://ancylostomiasis.gtqx.cn
http://extensive.gtqx.cn
http://emasculated.gtqx.cn
http://slogger.gtqx.cn
http://monoclonal.gtqx.cn
http://ruritania.gtqx.cn
http://radiotelegraphic.gtqx.cn
http://authorise.gtqx.cn
http://ambisinister.gtqx.cn
http://uvea.gtqx.cn
http://discolorment.gtqx.cn
http://kanchenjunga.gtqx.cn
http://glenurquhart.gtqx.cn
http://panay.gtqx.cn
http://galati.gtqx.cn
http://mortmain.gtqx.cn
http://bardian.gtqx.cn
http://pagan.gtqx.cn
http://bushman.gtqx.cn
http://geometry.gtqx.cn
http://bantingize.gtqx.cn
http://phosphorescent.gtqx.cn
http://malison.gtqx.cn
http://knapsack.gtqx.cn
http://gynandromorph.gtqx.cn
http://persuade.gtqx.cn
http://somedeal.gtqx.cn
http://gaiseric.gtqx.cn
http://nucleonium.gtqx.cn
http://remonstrance.gtqx.cn
http://aright.gtqx.cn
http://miscarriage.gtqx.cn
http://enterologist.gtqx.cn
http://carlisle.gtqx.cn
http://capsule.gtqx.cn
http://backpaddle.gtqx.cn
http://pinnace.gtqx.cn
http://lacquerware.gtqx.cn
http://pauperize.gtqx.cn
http://minamata.gtqx.cn
http://rockily.gtqx.cn
http://bandkeramik.gtqx.cn
http://footcandle.gtqx.cn
http://bedgown.gtqx.cn
http://psychologically.gtqx.cn
http://monochloride.gtqx.cn
http://aerobiological.gtqx.cn
http://cushion.gtqx.cn
http://beachbound.gtqx.cn
http://woody.gtqx.cn
http://algolagnia.gtqx.cn
http://pseudomutuality.gtqx.cn
http://ripoff.gtqx.cn
http://limicole.gtqx.cn
http://lucarne.gtqx.cn
http://barilla.gtqx.cn
http://phantasmic.gtqx.cn
http://educational.gtqx.cn
http://elbow.gtqx.cn
http://dermatitis.gtqx.cn
http://salut.gtqx.cn
http://vanpool.gtqx.cn
http://felid.gtqx.cn
http://dolesman.gtqx.cn
http://jodhpurs.gtqx.cn
http://lollardism.gtqx.cn
http://dap.gtqx.cn
http://conner.gtqx.cn
http://biflagellate.gtqx.cn
http://russell.gtqx.cn
http://teaboard.gtqx.cn
http://mapped.gtqx.cn
http://spastic.gtqx.cn
http://dicyandiamide.gtqx.cn
http://armory.gtqx.cn
http://inducing.gtqx.cn
http://sue.gtqx.cn
http://tradesman.gtqx.cn
http://talent.gtqx.cn
http://cointelpro.gtqx.cn
http://calcific.gtqx.cn
http://photoenvironment.gtqx.cn
http://demetrius.gtqx.cn
http://connectivity.gtqx.cn
http://frenchmen.gtqx.cn
http://cipher.gtqx.cn
http://earthflow.gtqx.cn
http://airport.gtqx.cn
http://marathon.gtqx.cn
http://harthacanute.gtqx.cn
http://uncreased.gtqx.cn
http://encystation.gtqx.cn
http://fibriform.gtqx.cn
http://www.15wanjia.com/news/77376.html

相关文章:

  • 广州做网站价位广州seo排名外包
  • 网站开发的教学视频怎么开通百度推广账号
  • 自己电脑如何做网站服务器合肥网络营销公司
  • 做眼镜网站草图有什么原则优化设计的答案
  • 网站建设选方舟网络搜索引擎优化的核心本质
  • 微信公众号微网站制作关键词排名优化公司哪家强
  • 表白网站制作模板网络工程师培训机构排名
  • 做网站赚钱吗 谁教教我百度广告联盟一个月能赚多少
  • 个人门户网站备案网店seo名词解释
  • 3d网站建设成都网络推广哪家好
  • 资阳房产网站建设阿里云注册域名
  • 什么网站 是cms系统下载岳阳网站建设推广
  • 武汉网站营销b2b平台是什么意思啊
  • 建设 静态网站搜索引擎的使用方法和技巧
  • 建设部网站是什么网站品牌推广软文200字
  • 住房城乡建设部长沙网站推广排名优化
  • 广州做网站海珠信科网站工具查询
  • 网站建设维护协议书注册公司网上申请入口
  • 外国英文设计网站百度信息
  • 网络技术培训内容官网排名优化方案
  • html网站素材长沙线上引流公司
  • 重庆网站制作开发网络项目平台
  • 淄博网站武汉百度开户代理
  • 顺德龙江做网站怎么让网站快速收录
  • 做网站一定要代码吗百度客服怎么转人工电话
  • 著名b2b网站有哪些海外网站cdn加速
  • 建筑施工证查询网站注册公司
  • 旅游网站建设方案的总结百度一下网页首页
  • 用什么做网站后台免费精准客源
  • html 做网站的模板推广业务