ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++函数笔记

2020-02-05 19:42:07  阅读:204  来源: 互联网

标签:函数 int 笔记 c++ 析构 TEST 函数调用 构造函数


构造函数

名字与类名相同,可以有参数,不能有返回值(void 也不行)
作用是对对象进行初始化,编译器会默认生成一个构造函数(什么也不干)
对一个对象构造函数必定调用,且只会调用一次
一个类可以有多个构造函数,参数个数或类型不同(可以有默认类型转换,如int转double)

class TEST
{
	public:
		TEST(int n){}	//1
		TEST(int n,int m){}	//2
		TEST(){}	//3
};
TEST array[3]={ 1, TEST(1,2)};   三个元素分别用1,2,3初始化
TEST *p[3]={new TEST(4),new TEST(1,2)};   只有两个元素被初始化,分别用1,2

析构函数

名字是对象名前加一个~ 如~TEST()
没有参数和返回值,一个类只能有一个析构函数,不像构造函数可以重载
默认生成析构函数,对象生命期结束时会自动调用析构函数
一般用来删除空间

class TEST
{
	public:
		~TEST()
		{
			cout<<"destruction"<<endl;
		}
};
int main()
{
	TEST array[2];
	cout<<"end main"<<endl;
	return 0;
}

输出:
end main
destruction
destruction

delete运算符导致析构函数调用
TEST * a;
a = new TEST; //构造函数调用
delete a; //析构函数调用
a = new TEST[3]; //构造函数调用三次
delete [] a; //析构函数调用三次

在这里插入图片描述

内联函数:

为了减少函数调用的开销,引入内联函数,编译器处理内联函数时直接将内联函数代码插入对应语句位置,不生成函数调用语句。
方法:
在函数定义类型前加 inline 关键字。

inline MAX(int a, int b)
{
	if(a>b)
		return a;
	return b;
}

复制构造函数:

只有一个参数,是同类对象的引用,注意不能是对象,以类TEST为例

TEST::TEST(TEST &a) 或
TEST::TEST(const TEST &a)
这样是不对的:
TEST::TEST(TEST a)

如果没有定义复制构造函数,编译器会自动构造一个复制构造函数(默认完成复制功能)
复制构造起作用的三种情况:

1. 当用一个对象去初始化同类另一个对象时。

TEST c2(c1);
TEST c2=c1; 这是赋值语句不是初始化

2. 如果某函数有一个参数是类A的对象,那么该函数调用时,类A的复制构造函数将被调用

void function(TEST a){}
int main()
{
	TEST a;
	function(a);
	return 0;
}

3.如果一个函数的返回值是类A的对象,则函数返回时会调用类A二的复制构造函数

TEST function()
{
	TEST a(3);
	return a;
}

tips:使用上述函数时会调用复制构造函数,会造成开销,如果你的函数不需要修改类的变量,推荐使用TEST &a作为形参,此外如果你的函数不能修改类的变量,可以使用const TEST &a作为形参。(引用没有使用新的空间,不会调用复制构造函数)

类型转换构造函数

目的是实现类型的自动转换
只有一个参数
酷似普通的构造函数

class TEST
{
	public:
		int a,b;
		TEST(int n)	  类型转换构造函数
		{
			a=n;	b=0;
		}
		TEST(int a,int b)
		{
			a=a;	b=b;
		}
};
int main()
{
	TEST c1(7,8);
	TEST c2=12;	 此处使用
	c1=9;	此处使用,9被自动转换成一个临时TEST对象
	return 0;
}

综合例子:
在这里插入图片描述
在这里插入图片描述
devC++进行了优化
课程链接:https://www.icourse163.org/learn/PKU-1002029030#/learn/announce

democles 发布了3 篇原创文章 · 获赞 0 · 访问量 26 私信 关注

标签:函数,int,笔记,c++,析构,TEST,函数调用,构造函数
来源: https://blog.csdn.net/qq_36366789/article/details/104185114

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有