C++01

一、命名空间

1.命名空间定义:

用法:namespace+命名空间的名字,然后后面是一对{},里面则为该命名空间的内容。

namespace N1{
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
}

 注意:

命名空间可以进行嵌套。

namespace N1{
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace N2{
		int b;
		int Sub(int big, int small)
		{
			return big - small;
		}
	}
}

 

同一个工程可以存在相同名称的命名空间,编译器之后会把合成一个命名空间 。

namespace N1{
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace N2{
		int b;
		int Sub(int big, int small)
		{
			return big - small;
		}
	}
}

namespace N1{
	int c;
	double e;
}

2.命名空间的使用:

三种方法:

1)   命名空间名称及作用域限定符。(N1::a就是此用法)

int main()
{
	cout << N1::a << endl;

	system("pause");
	return 0;
}

2)使用using将命名空间的成员进行引入,之后便可以直接使用。(using+命名空间名+作用域限定符引入了a)

using N1::a;

int main()
{
	cout << a << endl;

	system("pause");
	return 0;
}

3)使用using namespace将命名空间进行引入,之后进行直接使用。(using namespace+空间名引入其内部的所有成员)

using namespace N1;

int main()
{
	cout << a << endl;

	system("pause");
	return 0;
}

二、输入和输出

1.C++中使用cin和cout进行输入和输出。

2.输入和输出包含在<iostream>头文件中。

3.cin和cout包含在std的命名空间中。

4.c的输入输出仍然可以在此使用。

5.C++输入输出时,不在需要增加格式控制。

#include <iostream>
using namespace std;

int main()
{
	int a;
	double b;
	char c;

	cin >> a;
	cin >> b >> c;
	
	cout << a << endl;
	cout << b << " " << c;

	system("pause");
	return 0;
}

三、缺省参数

定义:当声明或者定义函数时,将其参数给一个默认值。在调用时,如果传参数,则用传入的值,否则用默认值。包含全缺省和半缺省。

1.全缺省参数

就是将其函数的参数全部给定一个默认值。

#include <iostream>
using namespace std;

int Test1(int left = 20, int right = 10)
{
	return left - right;
}

int main()
{
	
	system("pause");
	return 0;
}

2.半缺省参数

意思是将函数参数的默认值给其中的一部分。

#include <iostream>
using namespace std;

int Test1(int left , int right = 10)
{
	return left - right;
}

int main()
{
	
	system("pause");
	return 0;
}

3.注意事项:

1)半缺省参数默认值的提供必须从右向左,不可以跳跃的给出。

2)缺省参数不能同时在声明和定义中出现。如果有函数声明时,只能在声明中出现,不能在定义中出现。

3)缺省的默认值必须是常量或者全局变量

4)C语言中不支持

四、函数重载

1.概念和用法

在同一作用域中声明了几个功能类似的同名函数,函数的形参列表(参数的个数、参数类型、顺序)必须不同。

2.名字修饰(name Mangling)

C++就是用名字修饰来解决函数重载的问题,它是在编译过程中,将函数、变量名称重新改编,此时便可以唯一的标识重载函数。

在C语言中名字修饰,就是在函数名便面加上下划线(_),因此不能出现函数重载。

3.extern "c"

将函数的前面加上extern "c",则该函数将会按照C语言风格进行编译。

问题1:C语言为什么支持函数重载?

因为C语言的名字修饰非常简单,只是将函数名的前面加上下划线(_)来表示这个函数,则将功能类似的同名函数解析出来的标识是相同的。

问题2:C++重载函数是如何处理的?

利用名字修饰(name Mangling)根据函数、变量名名称对函数名进行进一步的解析,变为唯一标识次功能的名称。

问题3:C++能否将一个函数按照C的风格来编译?

在该函数的前面加上extern "c",便可以按照c风格来进行编译。

五、引用

1.引用的概念和特性

概念:不是定义一个新的变量,而是给已经存在的变量取了一个别名。编译器不给它开辟新的空间,而是和引用的变量公用同一块内存空间。

用法:类型&引用变量名(对象名) = 引用实体;

#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	int &ra = a;
	cout << ra << endl;

	system("pause");
	return 0;
}

注意:引用类型必须和实体是同种类型。

特性:

1)引用在定义时必须初始化。

2)一个实体可以有多个引用。

3)引用一旦存在一个实体,则不能在引用其它实体。

2.使用场景

1.做参数

void swap(int &left, int &right)
{
	int tmp = left;
	left = right;
	right = tmp;
}

2.做返回值

int& add(int &a)
{
	a += 10;
	return a;
}

注意:不能返回栈空间上的引用。

3.效率比较

1)传值、传址和引用的效率比较

传址和引用在传参上的效率几乎是相同的。

但是传值的效率会比他俩慢很多

2)引用和指针的区别

注意:在语法上面,引用只是一个别名,不占用内存空间,但是在实际实现时,是按照指针的方法实现的。

a) 引用在定义的时候必须要初始化,但是指针没有要求。

b) 引用初始化时引用一个实体,就不可以在引用其他实体 了;而指针可以在任何时刻指向任何一个同类型的实体。

c) 没有NULL引用,但是存在NULL指针。

d) sizeof的含义不同:在引用中表示的是该实体类型的大小;指针则表示的是地址空间所占的字节数(32位平台下占4字节)。

e) 存在多级指针,但是没有多级引用。

f) 访问实体的方式不同,指针需要显式解引用,引用则是编译器自己处理。

g) 引用比指针使用起来更加安全。

六、内联函数

1.概念和用法:

用inline修饰的函数就叫做内联函数,在编译时C++编译器会在该处进行展开,没有压栈开销,提高了运行的效率。

2.特性

inline是一种空间换时间的做法。

所以循环、递归或者代码很长的时候不适合用内联函数。

面试题1:宏的优缺点?

优点:增强代码的复用性、提高性能

缺点:不方便调试、代码的可读性差、可维护性差、没有类型安全检查。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值