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

公司网站建设外包流程网络营销推广好做吗

公司网站建设外包流程,网络营销推广好做吗,装饰公司简易手机网站,做网站用win2008系统W...Y的主页#x1f60a; 代码仓库分享#x1f495; #x1f354;前言#xff1a; 关于C的博客中#xff0c;我们已经了解了六个默认函数中的四个#xff0c;分别是构造函数、析构函数、拷贝构造函数以及函数的重载。但是这些函数都是有返回值与参数的。提到参数与返回… W...Y的主页 代码仓库分享  前言 关于C的博客中我们已经了解了六个默认函数中的四个分别是构造函数、析构函数、拷贝构造函数以及函数的重载。但是这些函数都是有返回值与参数的。提到参数与返回值我们就会想到可以修饰它们的一个关键字const。而且关于构造函数我们并没有将内容全部讲完所以我们今天这篇博客就是对const关键字的讲解以及构造函数的补充话不多说我们直接开始。 目录 const成员 取地址及const取地址操作符重载 再谈构造函数 初始化列表 const成员 const对于我们有语言基础的人并不陌生就是关于修饰变量使其成为一个不可修改的内容。在C中也是如此但是C中类的出现伴随的出现的就是一系列的成员函数而被const修饰的成员函数就是const成员函数。 我们来看一下这段代码 class Date { public: Date(int year, int month, int day) { _year year; _month month; _day day; } void Print() { cout Print() endl; cout year: _year endl; cout month: _month endl; cout day: _day endl endl; }private: int _year; // 年 int _month; // 月 int _day; // 日 }; void Test() { Date d1(2022,1,13); d1.Print(); const Date d2(2022,1,13); d2.Print(); } 上述代码是有错的在编译器编译时就会出现 这是为什么呢当我们使用const修饰d2时d2的类型就是const Date类型而我们去调用print函数去打印时print隐藏的函数参数其实是Date* const this所以参数不匹配导致程序报错。 那this指针的参数应该怎么是隐藏的所以C规定在函数后加上const的实际意义就是在this指针前加const。 所以正确的print函数应该在函数后加上const进行修饰。  void Print() const { cout Print()const endl; cout year: _year endl; cout month: _month endl; cout day: _day endl endl; } 这样无论在自定义类型的前面是否加上const进行修饰都可以对上述函数进行调用。所以在调用时我们可以将一个变量的权限放小但是绝不能进行放大。 随之又会引出一个问题成员函数有const进行修饰无论实参有无const都能进行调用那我们需不需要将所以的成员函数都加上const呢 其实是不用的我们加上const进行修饰的this指针指向的内容不被修改如果我们的成员函数需要修改this指针所指向的内容我们就不用去加const。 Date operator(int); Date operator(int day); Date operator-(int day); Date operator(); Date operator--(); Date operator--(int); 比如上述的运算符重载就不用加const因为这些都是改变this指向的内容的。 bool Date::operator(const Date y) {if (_year y._year){return true;}else if (_year y._year _month y._month){return true;}else if (_year y._year _month y._month _day y._day){return true;}return false; } int main() { Date s1(); const Date s2(); s1 s2;//正确 s2 s1;//报错 return 0; } 上述代码是的运算符重载在之前的博客中我们已经进行了复现但是当我们的参数类型一个被const修饰另一个没有const修饰当我们调用此函数s2  s1时就会出现报错因为不能将实参的权限进行放大也就是参数类型不匹配所以这种类似内容的函数就必须加上const进行修饰。 void Print() const; bool operator(const Date y) const; bool operator!(const Date y) const; bool operator(const Date y) const; bool operator(const Date y) const; bool operator(const Date y) const; bool operator(const Date y) const; int operator-(const Date d) const; Date operator(int day) const; Date operator-(int day) const; 总结 1.能定义const的成员函数都应该定义成const这样const成员与非const成员都可以进行调用。调用条件(权限平移)(权限缩小)。 2.要修改成员变量的函数不能定义const。 取地址及const取地址操作符重载 取地址操作运算符重载也是六大默认函数之一通过重定义对对象进行取地址操作就是取地址操作符的重载。这两个默认成员函数一般不用重新定义 编译器默认会生成。为什么会是两个呢因为有无const是有区别的他们会形成函数重载。 Date* operator() {cout Date* operator() endl;return this;}const Date* operator()const {cout const Date* operator()const endl;return this;} int main() {// const对象和非const对象都可以调用const成员函数const Date d1(2023, 10, 31);d1.Print();Date d2(2023, 1, 1);d2.Print();cout d1 endl;cout d2 endl;return 0; } 这里许多人就会有疑问这里不会产生二义性吗针对cout d2  endl;因为d2没有被const修饰所以既可以调用理论上来说两个函数都可以进行调用。但是C会优先匹配最合适的类型因为d2没有被const进行修饰所以优先会调用没有被const修饰的函数。 如果将没有const修饰的函数进行屏蔽两种实参照样可以进行调用。 再谈构造函数 之前我们就讲过构造函数已经将了有80%了现在我们将构造函数中剩下的20%进行收尾。我们先来复习一下之前的构造体系 class Date { public: Date(int year, int month, int day) {_year year;_month month;_day day; } private: int _year; int _month; int _day; }; 这是函数体内初始化我们进行对象的初始化时就会调用此函数当我们没有构造函数时我们就会调用C提供的默认构造函数进行匹配。 构造函数的特征 1. 函数名与类名相同。 2. 无返回值。 3. 对象实例化时编译器自动调用对应的构造函数。 4. 构造函数可以重载。 虽然上述构造函数调用之后对象中已经有了一个初始值但是不能将其称为对对象中成员变量 的初始化构造函数体中的语句只能将其称为赋初值而不能称作初始化。因为初始化只能初始 化一次而构造函数体内可以多次赋值。 现在我们还有一种可以初始化的办法 Date(int year, int month, int day):_year(year),_month(month) ,_day(day),_ref(year),_n(1){// 初始化列表} 这样的初始化我们称之为初始化列表。 初始化列表 初始化列表以一个冒号开始接着是一个以逗号分隔的数据成员列表每个成员变量后面跟 一个放在括号中的初始值或表达式。 class Date { public: Date(int year, int month, int day) : _year(year), _month(month), _day(day) {} private: int _year; int _month; int _day; }; 这样写我们照样可以进行初始化。这两种方法都可以进行初始化他们的区别在哪呢 上述的例子使用两种初始化都可以但是有些成员变量就只能使用初始化列表进行初始化。因为在类中私有成员都只是声明没有开辟空间而特殊的成员变量只能在定义的时候进行赋值比如引用、const修饰……所以我们要在初始化列表进行定义。 在内置类型中构造函数将内置类型进行赋随机值而特殊内置类型只能赋值一次所以不能再被改变所以我们就要一次性将其赋值好 class A { public: A(int a) :_a(a) {} private: int _a; }; class B { public: B(int a, int ref) :_aobj(a) ,_ref(ref) ,_n(10) {} private: A _aobj;  // 没有默认构造函数 int _ref;  // 引用 const int _n; // const }; 所以引用成员变量、const成员变量、自定义类型成员(且该类没有默认构造函数时)都要进行初始化列表赋值。 当我们去定义一种自定义类型时如果没有对应的构造函数程序就会报错。所以当我们定义一个类嵌套在另一个类时在创建类的构造函数时创建成全缺省参数的构造函数。 下面给大家看一个题 class A { public:A(int a):_a1(a),_a2(_a1){}void Print() {cout_a1 _a2endl;} private:int _a2;int _a1; }; int main() {A aa(1);aa.Print(); } A. 输出1  1 B.程序崩溃 C.编译不通过 D.输出1  随机值 这道题应该选D这是为什么呢成员变量在类中声明次序就是其在初始化列表中的初始化顺序与其在初始化列表中的先后次序无关 所以_a2是在私有成员中先声明的所以在初始化中先定义_a2因为_a1在后面所以先为随机值所以_a2为随机值_a1为1. 最后我们来总结一下初始化列表解决的问题 1、必须在定义的地方显示初始化  引用  const   没有默认构造自定义成员 2、有些自定义成员想要显示初始化自己控制 3.   尽量使用初始化列表初始化 4. 构造函数能不能只要初始化列表不要函数体初始化 答不能因为有些初始化或者检查的工作初始化列表也不能全部搞定 class Stack { public:Stack(int n 2):_a((int*)malloc(sizeof(int)* n)), _top(0), _capacity(n){//...//cout Stack(int n 2) endl;if (_a nullptr){perror(malloc fail);exit(-1);}memset(_a, 0, sizeof(int) * n);} 当我们进行动态内存开辟时我们就需要进行函数内外的配合因为在初始化列表中不能进行其他操作而在函数体内可以为了避免开辟失败我们需要进行指针的检查以及其他操作。所以80-100%初始化列表搞定还有需要用函数体他们可以混着用 以上就是本次全部内容感谢大家观看
http://www.hkea.cn/news/14265738/

相关文章:

  • 必要 网站越众做的绿色建筑的网站
  • 男女性做那个微视频网站wordpress解决大型访问
  • 毕业设计网站成品wordpress给公司建站
  • 九洲建设集团网站办一年宽带多少钱
  • 2008iis7怎么搭建网站财务软件哪个好
  • 刘强东自己做网站wordpress 自动回复
  • 阿里云 企业 网站企查查企业信息查询平台
  • 北京网站建公司新闻广告图片素材网
  • 网站怎么防黑客制作网络广告教学设计
  • 闵行网站建设外包网页设计师的主要工作
  • 怎么可以自己做网站被百度收到wordpress编辑模板
  • html网站模板资源深圳市官方网站
  • 蚌埠网站建设专业的公司4000-262-企业网站建设公司上海
  • 团购网站建设怎么样渭南网站建设公司电话
  • win7网站建设物流网站建设平台
  • 东城网站建设工作室目录搜索引擎网站
  • 响水做网站价格wordpress登录界面改哪个文件夹
  • 法律检索网站开发如何在网上推广
  • 温州模板建站公司做网站有什么专业术语
  • 网站建设基础条件小公司做网站的好处
  • 做企业网站一定要企业邮箱嘛鞍山 网站建设
  • 科技网站模板免费下载com域名注册
  • 沈阳微信网站建设东阳网络推广公司
  • 上海建站网站简洁案例电子商务网站建设精英
  • 网站模板大全下载国内欣赏电商设计的网站
  • 代码共享网站六安市 网站集约化建设
  • 去国外做外卖网站好网站分为四个步骤开发建设
  • 最早的做团购的网站wordpress删除自豪的
  • 华强北ic网站建设抖音指数查询
  • 个人网站盈利模式free theme wordpress