语言开发-C++基础(变量定义与函数重载)

语言开发-C++基础(变量定义与函数重载)

1.历史进程
1970  	肯  汤普逊  UNIX	UNIX之父
1972	丹里斯 里奇   C		C语言之父
1979	Bjarne Stroustrup  比扬尼  C++之父	带类的C 	C with class	
1983	C++		c plus plus 
1998	ISO	C++98(*)
2003	C++03	
2011	C++11(*)			c/c++
2.第一个C++程序
<<	输出运算符
>>	输入运算符
cout 	console	output  控制台输出  (see-out)
cin		console input	控制台输入 (see-in)
std		standard	标准 名字空间
::		作用域运算符	"的"
endl	end line		换行	\n

1.头文件
	C: stdio.h
	C++: iostream (stdio.h == cstdio)  C++ 标准库的头文件通常不带扩展名
			.h    .hpp
			
2.输入输出
	C: 		printf()  scanf()
	C++:	cout <<		cin >>

3.命名空间	namespace
	std是C++ 标准库中所有的变量、函数、对象、类型等名字所在的空间
	::
4.扩展名
	C: 	.c 
	C++:	.cpp	[.C 	.c++	.cxx]
	
5.编译器
	C: 	gcc		gnu c complier	(GCC)
	C++:	g++(*)		c++
			gcc 01hello.cpp -lstdc++ -o hello2
			
编译器安装:
	sudo apt-get install g++
3.命名空间 namespace
what
why
how
命名空间 本质就是程序员分配的一块内存空间,比如标准库给这个空间起了一个名字叫std
作用:用来避免名字冲突
使用方式:
	创建名字空间
		namespace 命名空间名
		{
			//各种名字  如 变量、函数、类型 ...
		}
	1.使用作用域运算(限定)符::
		命名空间名::要访问的成员;
		std::cout
		std::cin 

	2.命名空间声明
		using 命名空间名::要访问的成员;
		using std::cout;

	3.命名空间指令
		using namespace 命名空间名;
		using namespace std;

	4.无名名字空间
		在C++中,所有不属于任何命名空间的全局标识符,将被编译器放到无名名字空间中
			::要访问的成员

-------------------

4. 类型、函数
(1) 结构struct、联合union、枚举enum
1.在C++中,使用结构体来定义变量时,可以省略关键字struct
	因为在C++中,struct就是一个真正的自定义类型
	
2.在C++中,结构不仅可以包含变量,还可以有函数
	把结构中的变量,称为成员变量
	把结构中的函数,称为成员函数
	
3.在使用联合类型定义变量时,可以省略关键字union
	union U 
	{
		int a;
		char c;
	};
	U u;
	u.a = 0x12345678;
	c = ?

4.在使用枚举类型定义变量时,可以省略关键字enum
	类型转换:
		(类型)变量 	//C 风格
		类型(变量)	//C++ 风格
		
		static_cast<类型>(表达式)	//静态转换
		优点:1.明显	2.难写
	
		const_cast<类型>(表达式)	//去除常量属性

		reinterpret_cast<>()		//重新解释
		dynamic_cast<>()			//动态转换


		double d = 1.23;
		int a = d;	//1  int a = static_cast<int>(d);
(2) 布尔类型bool
是C++ 的基本类型之一
用于表示逻辑值	真(true)  假(false)
布尔类型只有两种值  1  和   0
常用于	条件判断和函数返回

布尔类型只占一个字节的空间
(3) 字符串类型string
C++标准库提供了一种类型专门用于表示字符串 string 
	strcmp
	strcpy
	strcat
	...

string 与 const char *的转换
	const char *可直接赋值给string类型的变量
	string类型转成const char *需要手动转换:
		str.c_str()
(4) 引用
引用是一个已存在变量的别名
格式:
	类型 &引用名=变量;
	例:
		int a = 10;
		int &ra = a;  //ra 与 a就是同一个变量
		
	注:1.引用声明时,必须初始化
		2.引用不是一个真正的变量,只是一个别名,所以系统不会给引用单独分配空间
		
		
	引用最主要的功能是用于函数传参!
		1.可读性更好
		2.效率更高
(5) 函数升级
函数重载
	在相同的作用域中,允许定义名字相同但参数列表不同的函数,这种特性称为函数重载
	int abs(int)
	double abs(double)
	short abs(short)
	……
	
函数重载的实现原理:
	由编译器换名实现,编译完成后,函数的名称会变成 函数名+参数类型
	
	C和C++混合编程:
		extern "C"		链接指示	
(6)引用与函数重载
区别:
	相同的作用域
	函数名相同
	参数列表不同
	
	extern "C"
		__cplusplus
		
默认/缺省参数:default argument
	1.当默认值与函数重载一起出现时,要避免二义性问题,不要让计算机模糊不清
	2.当函数的声明和实现分开时,形参的默认值应该写在声明处
	3.当某个形参设置了默认值,它右边所有的形参数都需要设置
	

内联inline
	inline void sum(int a,int b);
	把函数体嵌入到调用点,提高执行效率,节省函数调用的开销
	仅仅是给编译器的一个建议
	内联函数体通常不能太复杂,一般不应该出现循环、选择结构
	
	在C 中,在新版本的编译器里,内联声明必须写在实现处。
	
	
动态内存分配:
C: 	malloc() 	free()
C++:	new			delete
		new 用于内存分配
		delete 用于内存释放
		
		类型 *指针变量名 = new 类型;
		类型 *指针变量名 = new 类型(初值);
		类型 *指针变量名 = new 类型[元素个数];
		
		delete 指针变量名;
		delete []指针变量名;
		
		nullptr	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农-老七

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

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

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

打赏作者

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

抵扣说明:

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

余额充值