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

做设计常用的素材网站深圳百度百科

做设计常用的素材网站,深圳百度百科,潍坊中小型网站建设公司,线上商城运营方案构造函数的一项重要功能是对成员变量进行初始化&#xff0c;为了达到这个目的&#xff0c;可以在构造函数的函数体中对成员变量一一赋值&#xff0c;还可以采用初始化列表。 C构造函数的初始化列表使得代码更加简洁&#xff0c;请看下面的例子&#xff1a; #include <iostre…

构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。

C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:

    #include <iostream>using namespace std;class Student{private:char *m_name;int m_age;float m_score;public:Student(char *name, int age, float score);void show();};//采用初始化列表Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){//TODO:}void Student::show(){cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;}int main(){Student stu("小明", 15, 92.5f);stu.show();Student *pstu = new Student("李华", 16, 96);pstu -> show();return 0;}

运行结果:小明的年龄是15,成绩是92.5李华的年龄是16,成绩是96

如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添加了一个冒号:,后面紧跟m_name(name), m_age(age), m_score(score)语句,这个语句的意思相当于函数体内部的m_name = name; m_age = age; m_score = score;语句,也是赋值的意思。

使用构造函数初始化列表并没有效率上的优势,仅仅是书写方便,尤其是成员变量较多时,这种写法非常简单明了。初始化列表可以用于全部成员变量,也可以只用于部分成员变量。下面的示例只对 m_name 使用初始化列表,其他成员变量还是一一赋值:

    Student::Student(char *name, int age, float score): m_name(name){m_age = age;m_score = score;}

注意,成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。请看代码:

    #include <iostream>using namespace std;class Demo{private:int m_a;int m_b;public:Demo(int b);void show();};Demo::Demo(int b): m_b(b), m_a(m_b){ }void Demo::show(){ cout<<m_a<<", "<<m_b<<endl; }int main(){Demo obj(100);obj.show();return 0;}

运行结果:2130567168, 100

在初始化列表中,我们将 m_b 放在了 m_a 的前面,看起来是先给 m_b 赋值,再给 m_a 赋值,其实不然!成员变量的赋值顺序由它们在类中的声明顺序决定,在 Demo 类中,我们先声明的 m_a,再声明的 m_b,所以构造函数和下面的代码等价:

    Demo::Demo(int b): m_b(b), m_a(m_b){m_a = m_b;m_b = b;}

给 m_a 赋值时,m_b 还未被初始化,它的值是不确定的,所以输出的 m_a 的值是一个奇怪的数字;给 m_a 赋值完成后才给 m_b 赋值,此时 m_b 的值才是 100。

obj 在栈上分配内存,成员变量的初始值是不确定的。

初始化 const 成员变量

构造函数初始化列表还有一个很重要的作用,那就是初始化 const 成员变量。初始化 const 成员变量的唯一方法就是使用初始化列表。例如 VS/VC 不支持变长数组(数组长度不能是变量),我们自己定义了一个 VLA 类,用于模拟变长数组,请看下面的代码:

    class VLA{private:const int m_len;int *m_arr;public:VLA(int len);};//必须使用初始化列表来初始化 m_lenVLA::VLA(int len): m_len(len){m_arr = new int[len];}

VLA 类包含了两个成员变量,m_len 和 m_arr 指针,需要注意的是 m_len 加了 const 修饰,只能使用初始化列表的方式赋值,如果写作下面的形式是错误的:

    class VLA{private:const int m_len;int *m_arr;public:VLA(int len);};VLA::VLA(int len){m_len = len;m_arr = new int[len];}

http://www.ds6.com.cn/news/33198.html

相关文章:

  • 大连市英文网站建设电视剧排行榜
  • 如何向google提交网站百度推广电话是多少
  • 网站建设工资一月多少钱创建自己的网站
  • ps怎么做响应式网站布局图网页自动点击软件
  • 网站建设与维护总结什么公司适合做seo优化
  • 网站建设优化推广贵州电脑优化大师
  • 2345百度百科做网站seo推广公司
  • 免费微网站开发平台东莞网络推广及优化
  • 网站的用户登录一般怎么做的武汉seo论坛
  • 朔州网站建设优化seo网站优化公司
  • 没有营业执照怎么样做百度企业网站惠州自动seo
  • 成都网站建设单位做网销的一天都在干嘛
  • 专业的龙岗网站建设如何宣传推广产品
  • 扬中市住房和城乡建设局网站营销活动
  • 网站出错 图片百度竞价推广登陆
  • 企业网站的建设的功能定位广州搜索seo网站优化
  • 临沂住房和城乡建设局网站链接交换平台
  • 苏州城乡住房建设厅网站怎样打开网站
  • 网站的域名分为哪些怎么创作自己的网站
  • 网站不兼容怎么办啊seo外链发布技巧
  • 大业推广网站如何做网站赚钱
  • 生意网聊城seo优化
  • asp 女性 美容 知识 网站 源码网站建设的整体流程有哪些
  • 网站建设实训课百度小程序关键词优化
  • 企业网站的缺点湖南专业seo推广
  • 免费网站客服工具营销型网站策划
  • 网站建设成本图超级外链吧
  • 设计之家官方网站域名权重是什么意思
  • 响应式布局实现搜索引擎优化是做什么的
  • 自己建网站做外贸微信软文范例