《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)

相关文章
|
4月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
4月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
105 10
|
4月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
70 3
|
4月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
73 3
|
4月前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
4月前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
4月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
49 0
|
4月前
|
C++
C++构造函数初始化类对象
C++构造函数初始化类对象
30 0
|
2天前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
68 19