大一学生的上课笔记:c++ 对象的生命周期

构造函数

是什么

主要用来在创建对象时初始化对象即为对象成员变量赋初始值。(为方便后来继承、封装等操作)

语法

  • 函数名和类名相同
  • 没有返回值类型,和返回值
  • 满足重载条件可以重载
#include<iostream>
using namespace std;
class Mark
{
public:
	//调用了一个无参的构造函数
	Mark()
	{
		name = 0;
		cout << "调用了一个无参的构造函数" << endl;
	}
	//调用了一个含参的构造函数
	Mark(int n)
	{
		num = n;
		cout << "调用了一个含参的构造函数" << endl;
	}
	int num, name;
};
int main()
{
	Mark obj_1;
	Mark obj_2(1);
	return 0;
}

调用的时机

  • 创建对象是系统自动调用,不需要也不能自己调用
  • 通过控制实参,可以控制调用的构造函数的重载

构造函数的特点

  • 如果一个类中没有显示的给出构造函数,系统会自动地给出一个隐式的构造函数。(创建对象,必须调用构造函数)
  • 如果类中有多个构造函数,那么通常会有不同的函数体。
  • 如果用户提供了构造函数,那么系统就不再提供默认构造。
  • 类中如果只有有参构造,没有无参构造, 那么就不能调用默认构造的方式初始化对象, 想用这种方式初始化对象那么就提供无参构造。

成员初始化列表

  • 初始化列表也是给类中数据成员初值的一种方式。
  • 某些情况下,数据成员必须初始化而不能在构造函数中直接赋值。(比如:const int)
  • 初始化必须使用成员初始化列表(特殊要求)

语法要求

  1. 不能用于除构造函数之外的其他成员函数。
  2. 位于形参表的右括号之后、函数体左括号之前。
  3. 成员初始经列表由逗号分隔的初始化列表组成(前面带冒号)。
  4. 必须用这种格式来初始化非静态const数据成员。
  5. 必须用这种格式来初始化引用数据成员。

代码格式

Mark::Mark(int n)
:num(n)
{	
	//...
}

(特别注意:初始化工作是在对象创建是完成的,未执行任何代码。)

析构函数

什么是析构函数

  • 特殊的成员函数
  • 对象生命周期结束时系统自动调用(不需要自己主动释放了)

析构函数的定义

语法要求

  • 函数名:~类名
  • 没有返回值类型和返回值
  • 不允许重载

代码格式

class Mark
{
public:
	~Mark()//析构函数无形参表
	{
	//...
	}
}

调用时机

  • 析构函数可以通过对象调用(必须是公有属性)
  • 在对象生命结束时,系统会主动调用析构函数

1. 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。
2. 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。
3. 对于静态(static)对象,当对象诞生时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。
4. 对于以new方式产生出来的局部对象,当对象诞生时其构造函数被执行,析构函数则在对象被delete时执行。时执行

析构函数的特点

  • 对对象做一些清理工作(对象生命结束,触发析构函数的执行
  • 一个类只有一个析构函数
  • 如果没有析构函数,系统给出默认析构函数(类似于构造函数)

this 指针

什么是this指针

  • 系统自动生成且隐藏,看不到定义,但是可以使用
  • this指针不是对象本身的一部分,它的作用域在类的内部
  • 当类的普通函数在访问类的普通成员的时候,this指针总是指向调用者对象

使用this指针

  • 必须在类中使用,在类外不能使用
  • this->成员名;或(*this).成员名
  • return this或return *this

注意事项

  • 一般情况下,可以省略this指针
  • 在类中,函数的形参,与类中成员同名,不能省略``
class Mark
{
public:
	void fun(int val);
	int val;
}
void Mark::fun(int val)
{	
	this->val=val;//类中成员与形参名相同
}

作业

用类写一个顺序表,即顺序表类,将之前的结构和函数封装到一个类中。

  • 初级:初始化函数,输出函数,插入函数。
  • 中级:增删改查
  • 高级:排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yichenzero89

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值