C++学习笔记(一) 基本特性 引用和函数重载

记录C++的一些基本语法特性

一、申请内存

1.1 与C对比

cmalloc(type*)malloc()开辟内存,强制转化数据类型
c++newnew int(10)在开辟内存的时候可以赋值,并且返回该数据类型的指针

1.2 开辟与释放数组

释放数组时不同

int * arr = new int[10]; // 开辟数组
delete[]  arr; // 释放数组,delete后面加个中括号[]

二、引用(也是C的特性)

2.1 引用的基本语法

int a = 10;

// 实际上等于int * const ref = &a,并且是const,所以这个指针的指向不能变,即ref只能指向这一个地址
int &b = a; /* c++中的引用语法,相当于给a起了一个别名,类似于python的b = a,对象b本身没有单独分配内存空间它指向计算机中存储对象a的内存*/

b = 20;
cout<< "a=" << a << endl; // a=20

2.2 函数与引用

1.引用作形参

void abSwap(int &a1, int &b1) // 给a和b起了一个别名
{
	int temp = a1; 
	a1 = b1;
	b1 = temp;
}

int main(void)
{
	int a = 10;
	int b = 30;
	abSwap(a,b);
	cout<< "a=" << a << endl; // a=30
	cout<< "b=" << b << endl; // b=10
}
  1. 引用作函数返回值
int & test1() // 给a和b起了一个别名
{
	int a1 = 10;
	return a1;
}

int & test2() 
{
	static int a2 = 20; // 静态变量(存放在全局区),所以这个返回引用时,不会被接着释放
	return a2;
}

int main(void)
{
	int &a_1 = test1();
	cout<< "a_1=" << a_1 << endl; // a=10
	cout<< "a_1=" << a_1 << endl; /* 会打印地址,因为局部变量在执行完函数后会被释放,所以test1返回了一个局部变量a1的引用
								虽然main中a指向了a1的地址,但是a1在执行完局部函数后被释放了,第一次能打印出来因为编译器做了保留
								(那要是换个编译器呢?)*/
	int &a_2 = test2();
	cout<< "a_2=" << a_2 << endl; // a=20
	cout<< "a_2 =" << a_2 << endl; // a=20,仍然会打印出来,因为静态变量是存放在全局区,所以子函数调用完后也没有释放。

	test2() = 30;
	cout<< "a_2=" << a_2 << endl; // 30
	
}

三、函数重载(C也有,但是需要使用GCC 的内置函数,麻烦)

void func(int a, double b)
{
	cout<< "func(int a, double b)" <<endl;
}
void func(int a)
{
	cout<< "func(int a)" <<endl;
}
void func(double a, int b)
{
	cout<< "func(double a, int b)" <<endl;
}

int main(void)
{
	// 函数重载,可以有相同的函数名,只要同名函数在同一作用域下,且参数个数不同、类型不同,或者相同个数相同类型但是顺序不同
	// 尽量不要使用默认参数
	func(1, 2.2);
	func(2);
	func(2.2, 1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值