【C++】类内成员析构函数 常函数 static的介绍 浅拷贝


前言

本节课重点讲的是析构函数 常函数 static成员


提示:以下是本篇文章正文内容,下面案例可供参考

一、析构函数

作用:清理工作
比如用new给成员申请了空间,析构函数可以释放掉
调用时间决定其主要作用

与构造函数对比:调用时间
定义对象--->构造函数--->内存释放时--->析构函数

形式如下:

~类名()
{
}

注意:不能有参数,返回值,返回值类型,没有重载,
默认析构函数:什么都不做,类比默认构造函数

几种调用:

	//局部对象:作用域结束调用析构
	Students stu;
	//临时对象:所在语句结束调用析构
	Students();
	//指针对象
	Students* pstu = new Students();
	delete pstu;//调用析构函数

有人会说:申请指针对象能不能用malloc和free呢?
我的回答是:不能,看下
malloc 和 new的区别
new会触发构造函数,malloc不会
free 和delete区别
delete会触发析构函数,free不会

class Students
{
public:
	Students()
	{
		cout << "Student 构造函数" << endl;
	}

	~Students()//比构造函数后执行
	{
		cout << "Student 析构函数" << endl;
	}
};

二、常函数

形式

void fun()const{;}//在参数列表后加const

注意:构造函数和析构函数不可以是常函数
使用:
和const变量一样,只能使用类内成员,不能修改他
对函数的功能有更明确的限定

特点:
常函数的this指针是 const CStu*
常对象只能调用常函数,不能调用普通函数

代码如下:

class Students
{
public:
	int age;
	Students()
	{
		age = 18;
		cout << "Student 构造函数" << endl;
	}

	void fun() const
	{
		cout << age << endl;//√
		//age = 19;//×
	}
};

三、static

形式:

static int a;
static void fun()
{
	
}

使用方式
对象调用
类名作用域

int Students::age = 188;
Students::fun();
//或者
Students stu1;
stu1.age;
stu1.fun();

静态成员
类外初始化
无static
静态常量整型数据成员可以直接进行初始化
static const float a = 13.12f;
不行
static const int a = 13.12f;
整型
不使用循环,来一个自加1

静态成员函数
无this
不能调用非静态成员,可以调用静态成员
可以作为一种指挥该类所有对象的作用
属于类的属性,不是对象,即所有对象共有一个
可以通过类名调用
可以通过对象调用

静态函数成员注意:
只能使用static的成员变量和成员函数
为什么呢?因为static的变量和函数都是在一开始就声明好的,在static的函数中去调用还没有的变量和函数,怎么使用?static的变量就可以使用,因为他们是一起创建的

四、浅拷贝

浅拷贝,拷贝一些不是指针的变量
形式

Students(Students &stu)
{
	
}

实际上就是构造函数
参数是本类的常引用

调用时机

CStu a;//声明一个对象
1、CStu a1(a);//临时对象
2、CStu a3 = CStu(a);//临时对象赋值
3、CStu* a4 = new CStu(a);//指针对象
//注意:赋值是不会的
CStu s;
CStu p;
s = p;

2.当程序生成对象副本时
函数参数传递对象的值
函数返回对象

有什么功能:

默认的复制构造函数,逐个复制非静态成员(成员的复制称为浅复制)值,复制的是成员的值
系统默认的这个又叫浅拷贝
实践一下,模仿一下默认的

class Students
{
public:
	Students()
	{
		cout << "Student 构造函数" << endl;
	}
	
	Students(Students&stu)
	{
	}
};
	模仿的这个也是浅拷贝
同一个类的多个对象,内存排布是一样的,地址不同
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

人才程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值