24-拷贝构造函数的调用规则

简介: 24-拷贝构造函数的调用规则
#include<bits/stdc++.h>
using namespace std;
class Person {
public:
  //无参(默认)构造函数
  Person() {
    cout << "无参构造函数!" << endl;
  }
  //有参构造函数
  Person(int a) {
    age = a;
    cout << "有参构造函数!" << endl;
  }
  //拷贝构造函数
  Person(const Person& p) {
    age = p.age;
    cout << "拷贝构造函数!" << endl;
  }
  //析构函数
  ~Person() {
    cout << "析构函数!" << endl;
  }
public:
  int age;
};
void test01()
{
  Person p1(18);
  //如果不写拷贝构造,编译器会自动添加拷贝构造,并且做浅拷贝操作
  Person p2(p1);
  cout << "p2的年龄为: " << p2.age << endl;
}
void test02()
{
  //如果用户提供有参构造,编译器不会提供默认构造,会提供拷贝构造
  Person p1; //此时如果用户自己没有提供默认构造,会出错
  Person p2(10); //用户提供的有参
  Person p3(p2); //此时如果用户没有提供拷贝构造,编译器会提供
  //如果用户提供拷贝构造,编译器不会提供其他构造函数
  Person p4; //此时如果用户自己没有提供默认构造,会出错
  Person p5(10); //此时如果用户自己没有提供有参,会出错
  Person p6(p5); //用户自己提供拷贝构造
}
int main()
{
  //构造函数的调用规则
  //默认情况下,c++编译器至少给一个类添加3个函数
  //1、默认构造函数(无参,函数体为空)
  //2、默认析构函数(无参,函数体为空)
  //3、默认拷贝构造 函数,对属性进行值拷贝
  //构造函数的调用规则
  //1、如果用户有自定义的有参构造函数,c++不会再提供无参构造函数,但是会提供默认拷贝构造函数
  //2、如果用户定义拷贝构造函数,c++不再提供其他构造函数
  test01();
  system("pause");
  return 0;
 } 


相关文章
|
1天前
|
数据安全/隐私保护 C++
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++中的构造函数是特殊成员函数,用于对象初始化。类型包括默认构造函数(无参数)、带参数构造函数、拷贝构造函数和移动构造函数。默认构造函数设置对象默认状态,带参数构造函数允许传递初始化值。拷贝构造函数复制已有对象,移动构造函数高效转移资源。构造函数的访问权限可控制为public、private或protected。理解构造函数有助于编写健壮的C++代码。关注公众号`Let us Coding`获取更多内容。
25 0
|
7月前
|
编译器 C++
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(中)
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(中)
|
7月前
|
算法 编译器 C语言
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(下)
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(下)
|
7月前
|
存储 编译器 C++
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(上)
【C++】C++11右值引用|新增默认成员函数|可变参数模版|lambda表达式(上)
|
11月前
|
编译器 C++
C++中构造函数调用规则
C++中构造函数调用规则
66 0
|
11月前
|
Java
【构造函数】解析构造函数的作用
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
|
12月前
|
存储 编译器 C++
类的默认成员函数、赋值运算符重载(二)
如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
43 0
|
C++
【五、运算符重载实例分析】运算符重载实例、重载的机制、步骤、返回值及参数确定、友元函数与成员函数
【五、运算符重载实例分析】运算符重载实例、重载的机制、步骤、返回值及参数确定、友元函数与成员函数
69 0
|
编译器 C++
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
346 0
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
103 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)