《C++避坑神器·三》带参构造和初始化列表赋值区别

简介: 《C++避坑神器·三》带参构造和初始化列表赋值区别


概要

带参构造和初始化列表赋值区别

技术细节

//手机类phone
class phone
{
public:
  phone()
  {
    cout << "phone无参构造" << endl;
  }
  phone(string name)
  {
    this->name = name;
    cout << "phone带参构造" << endl;
  }
private:
  string name;
};
//类对象作为类成员
class Person
{
public:
  Person(string name1, string pName) : name(name1), ph(pName)
  {
    //this->name = name1;
    //ph = pName;
  }
private:
  string name;
  phone ph;
};

Person类中有个手机类对象作为Person类的一个成员,如果直接如图中初始化列表方式给ph赋值,其实就是做了一个默认的操作Phone ph = pName; 这样ph直接是调用Phone类中的带参构造,不会调用无参构造。如果按照注释的方式赋值,实际做了两步操作,第一步:Phone ph;(已经在私有里面定义好了) 第二步: Ph = pName; 第一步ph调用无参构造,第二步ph对象又被赋值会调用带参构造。

需要注意的是当进行完第二步后此时的ph为带参构造的对象,第一步的无参构造的ph立刻销毁会调用析构函数,在屏幕上打印出来的顺序就是ph无参构造,ph带参构造,ph析构函数(析构的是无参构造的ph)

相关文章
|
7天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
28天前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
42 10
|
28天前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
26 3
|
28天前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
43 3
|
28天前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
28天前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
26天前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
16 0
|
26天前
|
C++
C++构造函数初始化类对象
C++构造函数初始化类对象
14 0
|
14天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4
|
14天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
16 4