C++(4) 函数



一、构造函数

在这里插入图片描述

1.概念及特点概括

构造函数是一种特殊的成员函数,可以用来解决“类声明体中不能直接赋值”的问题。
它主要用于为对象分配空间,进行初始化
特点;

  1. 必须与类名相同,不能任意命名。否则将会被当作一般函数成员来处理。
  2. 没有类型,也没有返回值。
  3. 它不能被显式地被调用,它是在定义对象的时候自动被调用,而且只执行一次。

二、构造函数的使用方法

1.初始化

先来说初始化的问题:
第一个:
通过直接传参的方式,在开始创造对象的时候将我们所需的值赋给数据成员

#include<iostream>
using namespace std;
class A{
	public:
		A(int x=0,int y=0);必须设定默认参数值,否则编译器会报错
		void show_A();
	private:
		int a;
		int b;
};
A::A(int x,int y){         //构造函数
	a=x;
	b=y;
}
void A::show_A(){
	cout<<"a="<<a<<"  b="<<b<<endl;
}
int main(){
	A ex_1(1,2),ex_2(3),ex_3; 
	ex_1.show_A();
	ex_2.show_A();
	ex_3.show_A();
}

结果如下:
在这里插入图片描述
我们会发现:在定义对象ex_2时,我们只传递了一个参数,而这个参数传给了第一个形参。这说明参数的传递是从左向右的。
第二个:使用new运算符动态建立对象。
通过 new运算符开辟空间,在此空间中存放了一个无名对象,并将此对象的地址放入指针中,通过指针来访问对象。

#include<iostream>
using namespace std;
class A{
	public:
		A(int x=0,int y=0);
		void show_A();
	private:
		int a;
		int b;
};
A::A(int x,int y){
	a=x;
	b=y;
}
void A::show_A(){
	cout<<"a="<<a<<"  b="<<b<<endl;
}
int main(){
	A *p;
	p=new A(9,10);
	p->show_A();
	delete p;
	return 0;
}

代码运行结果;
在这里插入图片描述

2.拷贝构造函数

1)第一种是很简单的情况,很容易理解,所以不多加解释
形如:
A ex_1(ex_2); 代入法
A ex_1=ex_2;赋值法
2)第二种是以“类”作为实参和形参来进行传递的。我们可以将这种类型看成第一种类型“代入法”的升级版。两者都有同样的过程。

#include<iostream>
using namespace std;
class A{
	private:
		int i;
	public:
		void show_A(){cout<<"i="<<i<<endl;}
		A fun1(A p);
		A fun2();
		A(int b){ i=b;}
};
A fun1(A p){          //将“类”作为参数
	 p.show_A();
}
A fun2(){           //返回一个临时对象
	A p2(4);
	return p2; 
}
int main(){
	A p1(10);
	fun1(p1);
	A p3=fun2();
	p3.show_A();
}

三、析构函数

相对于构造函数,析构函数相对更加简单,功能也更加单一。析构函数通常被由于撤销对象时的清理任务,比如释放被分配的空间。

  1. 从名字上来说:名字与析构函数相同,但开头多出了一个“~”。
  2. 析构函数为“三无人员 ”无参,无返回值,不能重载。
  3. 在撤销对象时,编译系统会自动调用析构函数。

默认析构函数已经能满足要求,自定义析构函数就是在图增烦恼,所以就不详细介绍了。

三、内联函数

内联函数与普通函数的区别在于:内联函数不需要寻址,只需要在被执行到内联函数时将此函数展开。执行多少次就被展开多少次。
普通函数在被调用的时候,系统首先要到函数的入口地址去执行函数体,执行完成之后再回到函数调用的地方继续执行,函数始终只有一个复制。
还有其它不同,但是作为小白就先了解到这。如果还有兴趣,可以看下这篇文章:
https://blog.csdn.net/weixin_41786584/article/details/82756515

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值