day3 分文件创建类/构造/析构/深浅拷贝/

本文介绍了C++中的分文件结构,重点讲解了构造函数和析构函数的原理和使用,包括它们的默认实现、调用规则。还探讨了拷贝构造函数的调用时机和深拷贝、浅拷贝的区别。同时提到了初始化列表、类对象作为成员的构造顺序,以及`explicit`关键字的作用和`new`、`delete`运算符的运用。
摘要由CSDN通过智能技术生成

分文件

.h放声明
.cpp放定义, 函数前面要加命名

构造和析构

编译器会默认提供构造函数, 析构函数, 拷贝构造函数(对非静态成员属性简单值拷贝)
编译器会默认调用构造和析构, 如果不写, 系统会默认实现一个空的
必须写在public下

构造函数

与类名相同, 没有返回值, 不写void, 可以发生重载->可以有参数的意思
自动调用, 只调用一次

class A{
		public:
			A(){
				//构造函数
		}
};

析构函数

与类名相同, 前面加~, 没有返回值, 不写void, 不能有参数
自动调用, 只调用一次

class A{
		public:      
			~A(){
				//析构函数
		}
};

构造函数的分类及调用

拷贝构造函数必须加上const
默认构造函数在创建对象的时候不能加()
分类
按参数

  1. 无参构造函数
Person p1;
person p1();错误
  1. 有参构造函数
Person p1(1000);或者 Persion p1=Persion(1000);
Person(1000); 匿名对象

按类型

  1. 普通构造函数
  2. 拷贝构造函数
Person(const Person& p)
Person p1(p2); 
Person p1 = Person(p2);

拷贝构造函数的调用时机

  1. 用已经创建好的对象来初始化新的对象
  2. 以值传递的方式给函数参数传值
  3. 以值得方式返回局部对象
  4. vs release 会做优化

构造函数的调用规则

  1. 写了自己的构造函数, 编译器就不会提供默认的构造函数, 但是会提供默认拷贝构造函数
  2. 写了自己的拷贝构造, 编译器就不会提供其他的构造函数

深拷贝和浅拷贝

有堆区的, 需要自己手动申请空间并复制

初始化列表

Person(int a, int b, intc){
	A=a;
	B=b;
	C=c;
}

Person():A(1), B(2), C(3){}
Person(int a, int b, int c):A(a), B(b), C(c){}

类对象作为类成员

先按顺序构造成员, 再构造自己, 先析构自己, 再逆序析构成员

explicit 关键字

防止隐式类型转换

new delete 运算符

new 类 会返回该类型的指针
并且会调用构造函数

Person* p1=new Person;
相当于
Person* p1=(Person*)malloc(sizeof(Person));
if(p1==NULL){
return 0;
}
p1->Init();调用构造函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值