基于C语言的C++学习笔记

C++语法的拓展

输入输出的不同

  就输入输出而言c语言用的是传统的stdio.h标准输入做到的,实现的方法是通过不定参数达到格式化输出的目的,由于面向过程的变成思路导致它非常的繁琐

#include <stdio.h>
int main()
{
	int a;
	scanf("%d",&a);
	printf("a = %d\n",a);
	return 0;
}

  c++则不同,初学者一般都会用iostream这个标准输入输出流,有趣的是c++头文件没有.h,取而代之的是引入了命名空间这个概念,我们可以通过引入命名空间来引入头文件中的输入输出流,这里的输入输出流也非常灵活,结尾的endl取代了c语言中的换行

#include <iostream>
using namespace std;
int main()
{
	int a = 0;
	cin >> a; // cin理解成键盘,值由键盘产生流向a
	cout << "a = " << a << endl; // cout理解成屏幕,数据流向屏幕
	return 0;
}

实际上C语言的printfC++也可以用只是cout更简单

类型的增加

  相比c语言的类型c++增加了stringbool类型
  其中string类型用于创建字符串,代替了c语言中用字符char的数组的形式去装字符串

//c语言风格的字符串
int main() 
{
	char str1[] = "hello world";
	printf("%s\n",str1);
	return 0;
}
//c++风格的字符串
int main() 
{
	string str2 = "hello world";
	cout << str2 << endl;
	return 0;
}

  至于布尔类型就是true和false,本质上true是1 false是0。布尔类型占用的空间实际上很容易被误解成只占用一位,实际上占用一个字节它的大小和char相同,所以实际上c可以通过枚举类型达到c++的布尔类型效果

#include <stdio.h>

typedef enum
{
	true = 1,
	false = 0
}bool; // 用枚举类型实现布尔类型

int main()
{
	bool a;
	a = true;
	printf("a = %d", a);
	return 0;
}
#include <iostream>

using namespace std;
int main()
{
	bool a;
	a = true;
	cout << "a=" << a << endl;
	return 0;
}

申请内存不同

  用户申请内存上来说c语言就显得比较繁琐,c语言借助stlib.h里的malloc函数去申请内存:

#include <stdio.h>
#include <stdlib.h>


int main()
{
	char* p;
	p = (char*)malloc(10);//向内存申请空间
	for (int i = 0; i < 10; i++)
	{
		p[i] = 1;
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d",p[i]);
	}
	free(p);//释放p中指的地址的内存
	return 0;
}

  相比于c c++使用了关键词new去代替的原有的类型

#include <stdio.h>


int main()
{
	int* p = new int(10);
	for (int i = 0; i < 10; i++)
	{
		p[i] = 1;
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d",p[i]);
	}
	delete p;
	return 0;
}

C++的引用类型

  数据类型 &别名 = 原名
  这是一个给变量取别名的方法,换句话说两个变量名(本名和别名)表示同一个地址里的值,当这个
值被某个名字调用后修改了,另一个名字访问它后也是修改后的

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = &a;
	
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	
	return 0;
}	

  别名有个使用限制,那就是它必须要在申明时候去给他赋值,而且后续无法修改变量。这里大家可以窥见其本质,对的,就是指针常量
  在函数中用引用可以减少我们的书写,这样写的时候非常方便不用加入很多的取值符号*

#include <iostream>
using namespace std;
void Swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	Swap(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
}	

实际上也可以作为函数的返回值,这里如果理解起来困难,可以把它当作指针函数

#include <iostream>
using namespace std;
int& Test()
{
	static int a = 10; // 这里同C的指针函数一样,不能返回局部变量
	return a;
}
int main()
{
	int a;
	a = Test();
	Test() = a+10; // 这里同C的指针函数一样,可以作为左值
	cout << "a = " << Test() << endl;
	return 0;
}

C++函数的拓展

函数的默认参数

  在C++中允许函数拥有默认的参数,当我们没有赋值的时候它会成为我们的默认值
语法:返回值类型 函数名(参数 = 默认值){}

#include <iostream>
using namespace std;
int Fun(int a, int b = 20, int c = 30);// 函数申明一般写默认值,默认参数必须放到非默认参数后面
int main()
{
	cout << Fun(10, 20, 30) << endl;
	cout << Fun(10) << endl;
	return 0;
}
int Fun(int a, int b, int c) // 函数实现和申明不能同时有默认值
{
	return a,b,c;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值