文章目录

  • 1.类通过构造函数进行数据成员初始化
  • 2.类成员初始化方式?
  • 3.什么情况下必须使用列表初始化?
  • 4.为什么用列表初始化成员变量会快一些?
  • 5.派生类构造函数的执行顺序

1.类通过构造函数进行数据成员初始化

一般来说,类中的数据成员是私有的,不能通过对象共有访问的方式对数据成员赋初始值。一般来说,构造函数就是用来用来在创建对象时初始化对象, 为对象数据成员赋初始值。
构造函数是类的一种特殊成员函数,不需要人为调用,而是在建立对象时自动被执行。

2.类成员初始化方式?

赋值初始化,通过在函数体内进行赋值初始化;
列表初始化,在冒号后使用初始化列表进行初始化。
这两种方式的主要区别在于:对于在函数体中初始化,是在所有的数据成员被分配内存空间后才进行的。列表初始化是给数据成员分配内存空间时就进行初始化,
就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),
那么分配了内存空间后在进入函数体之前给数据成员赋值,
就是说初始化这个数据成员此时函数体还未执行。

列表初始化:

#include<iostream>
using namespace std;class solution {public:solution(int value1,int value2):a(value1),b(value2){}//列表初始化void print() {cout << "a=" << a << " " << "b=" << b << endl;}
private:int a;int b;
};
int main()
{solution s(1, 2);s.print();return 0;
}

赋值初始化:

#include<iostream>
using namespace std;class solution {public:solution(int value1,int value2){a = value1;b = value2;}//列表初始化void print() {cout << "a=" << a << " " << "b=" << b << endl;}
private:int a;int b;
};
int main()
{solution s(1, 2);s.print();return 0;
}
a=1 b=2

3.什么情况下必须使用列表初始化?

必须使用成员初始化的四种情况:

 当初始化一个引用成员时;当初始化一个常量成员时;当调用一个基类的构造函数,而它拥有一组参数时;当调用一个成员类的构造函数,而它拥有一组参数时;
#include<iostream>
using namespace std;class solution {public:solution(int& value1,int value2):a(value1),b(value2){}//正确,列表初始化/*solution(int& value1, int value2) {a = value1;b = value2;}//错误,赋值初始化*/void print() {cout << "a=" << a << " " << "b=" << b << endl;}
private:int& a;int b;
};
int main()
{int a = 1;solution s(a, 2);s.print();return 0;
}

4.为什么用列表初始化成员变量会快一些?

赋值初始化是在构造函数当中做赋值的操作,而列表初始化是做纯粹的初始化操作。我们都知道,C++的赋值操作是会产生临时对象的。临时对象的出现会降低程序的效率。

5.派生类构造函数的执行顺序

虚拟基类的构造函数(多个虚拟基类则按照继承的顺序执行构造函数)。基类的构造函数(多个普通基类也按照继承的顺序执行构造函数)。类类型的成员对象的构造函数(按照初始化顺序)派生类自己的构造函数。
#include<iostream>
using namespace std;//虚基类
class A {public:A(int value) :a(value) {cout << "A的初始化" << endl;}
private:int a;
};//基类
class B {public:B(int value) :b(value) {cout << "B的初始化" << endl;}
private:int b;
};//类类型的成员
class C {public:C() {cout << "C的初始化" << endl;}
};//派生类
class D:public B,virtual public A {public:D(int value1, int value2) :B(value1), A(value2) {//初始化顺序和初始化列表的顺序无关,构造函数的初始化顺序按照一定规则进行。cout << "D的初始化" << endl;}
private:C c;
};
int main()
{D d(1, 2);return 0;
}
A的初始化
B的初始化
C的初始化
D的初始化

C++学习——类的初始化相关推荐

  1. 深入java虚拟机学习 -- 类的加载机制(续)

    昨晚写 深入java虚拟机学习 -- 类的加载机制 都到1点半了,由于第二天还要工作,没有将上篇文章中的demo讲解写出来,今天抽时间补上昨晚的例子讲解. 这里我先把昨天的两份代码贴过来,重新看下: ...

  2. java类成员初始化_简单了解Java类成员初始化顺序

    这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...

  3. python 类 子类 初始化 super

    类的初始化方法 在写python代码时候,总能看到初始化__init__的定义,但其实 初始化方法__init__是可选. class A:def __init__(self, x):self.x = ...

  4. 安卓插件化学习 - 类的加载

    安卓插件化学习 - 类的加载 引言 一.类的加载 1. 原理 2. 代码 2.1 宿主apk代码 2.1.1 插件管理器 2.1.2 配置文件 2.1.3 插件初始化 2.1.4 调用插件方法 2.2 ...

  5. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  6. 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)

    1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...

  7. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

  8. String类的初始化?

    在Java程序开发中我们经常会用到字符串.字符串是指一连串的字符,它是由许多单个字符连接而成的,如多个英文字母所组成的一个英文单词. 字符串中可以包含任意字符,这些字符必须包含在一对双引号" ...

  9. java对类对象初始化_Java类和对象初始化

    Java类和对象初始化Tag内容描述: 1.解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起 北京高伟达西南分软 Java EE 软件工程师 三年 Java EE 项目经验 行业方向 ...

最新文章

  1. NB-IoT与LoRa,两马领跑物联网竞赛,谁将最终胜出?
  2. 树莓派安装oepncv3.43
  3. 案例研究设计与方法-罗伯_旭进口重新设计-用户体验案例研究
  4. input发送a.jax_Java REST JAX-RS 2.0 –如何处理日期,时间和时间戳记数据类型
  5. C语言简单程序情话,给你一份程序员的“科技情话”,赶在双十一前脱单吧
  6. 3、构建并安装PHP扩展
  7. 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI
  8. python连续读取邮件_Python读取指定日期邮件的实例
  9. Swift游戏实战-跑酷熊猫 12 与平台的碰撞
  10. put与putIfAbsent区别
  11. 逆向动态调试之Ollydbg的使用
  12. 微博粉丝精灵_微信全国500强、微博粉丝数省内领先……看快报这群年轻人如何运营一个个人气平台...
  13. java saxreader 生成xml_SAXReader解析xml文件demo
  14. 透明质酸修饰牛血清蛋白|HA-BSA|荧光FITC标记透明质酸|FITC-peg-BSA
  15. 用数据分析看泰坦尼克号
  16. 2022-2023级西安交通大学MBA提前面试(预报名即将开启)6月初
  17. js三座大山——原型及原型链
  18. 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测
  19. 监听器(统计在线人数)
  20. 在计算机中 IDF MDF是什么意思?

热门文章

  1. LeetCode 1706. 球会落何处(模拟)
  2. LeetCode 1382. 将二叉搜索树变平衡(中序遍历+二分递归)
  3. LeetCode 654. 最大二叉树(递归)
  4. mysql获取网站绝对路径_Symfony2获取web目录绝对路径、相对路径、网址的方法
  5. 太原理工电子信焦工程_电气工程及其自动化专业毕业后做什么工作?近几年就业和收入怎样...
  6. 排序:冒泡排序与选择排序
  7. Java求最小数用哪个函数_在Java中使用小数进行计算的函数
  8. docker镜像打包save,载入load,启动run
  9. 科大讯飞2020完整事件抽取系统(bert+数据集)
  10. 基于深度学习的信息抽取技术