面试题:C++ 对C的扩展最全总结

c++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++继承了c语言高效,简洁,快速和可移植的传统。c++融合了3种不同的编程方式:c语言代表的过程性语言.c++在c语言基础上添加的类代表的面向对象语言.c++模板支持的泛型编程。目录一、 ::作用域运算符二、 名字控制2.1 C++命名空间(namespace)2.2using声明三、全局变量...
摘要由CSDN通过智能技术生成

 

c++语言在c语言的基础上添加了面向对象编程泛型编程的支持。c++继承了c语言高效,简洁,快速和可移植的传统。

c++融合了3种不同的编程方式:

  • c语言代表的过程性语言.
  • c++在c语言基础上添加的类代表的面向对象语言.
  • c++模板支持的泛型编程。

目录

一、 ::作用域运算符

二、 名字控制

2.1 C++命名空间(namespace)

2.2 using声明

三、全局变量检测增强

四、 C++中所有的变量和函数都必须有类型

五、更严格的类型转换

六、struct类型加强

七、“新增”bool类型关键字

八、三目运算符功能增强

九、 C/C++中的const

 9.1 C中的const

9.2 C++中的const

9.3 C/C++中const异同总结

9.4 尽量以const替换#define

十、引用

10.1 引用基本用法

10.2 函数中的引用

10.3 引用的本质

10.4 指针引用

10.5 常量引用

十一、 内联函数(inline function)

11.1 类内部的内联函数

11.2 内联函数和编译器

十二、函数的默认参数

十三、函数的占位参数

十四、函数重载(overload)


 

 

 

一、 ::作用域运算符

通常情况下,如果有两个同名变量,一个是全局变量,另一个是局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。

//全局变量
int a = 10;
//1. 局部变量和全局变量同名
void test(){
	int a = 20;
	//打印局部变量a
	cout << "局部变量a:" << a << endl;
	//打印全局变量a
	cout << "全局变量a:" << ::a << endl;
}

 

二、 名字控制

创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名字。c++允许我们对名字的产生和名字的可见性进行控制。

 

2.1 C++命名空间(namespace)

  • 创建一个命名空间:
namespace A{
	int a = 10;
}
namespace B{
	int a = 20;
}
void test(){
	cout << "A::a : " << A::a << endl;
	cout << "B::a : " << B::a << endl;
}

注意:

  • 命名空间只能全局范围内定义
  • 命名空间可嵌套命名空间
  • 命名空间是开放的,即可以随时把新的成员加入已有的命名空间中
  • 声明和实现可分离
  • 无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接

 

2.2 using声明

如果命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集合。

namespace A{
	int paramA = 20;
	int paramB = 30;
	void funcA(){ cout << "hello funcA" << endl; }
	void funcB(){ cout << "hello funcA" << endl; }
}

void test(){
	//1. 通过命名空间域运算符
	cout << A::paramA << endl;
	A::funcA();
	//2. using声明
	using A::paramA;
	using A::funcA;
	cout << paramA << endl;
	//cout << paramB << endl; //不可直接访问
	funcA();
}

 

三、全局变量检测增强

c语言代码:

int a = 10; //赋值,当做定义
int a; //没有赋值,当做声明

int main(){
	printf("a:%d\n",a);
	return EXIT_SUCCESS;
}

此代码在c++下编译失败,在c下编译通过.

 

四、 C++中所有的变量和函数都必须有类型

  1. C语言中,int fun() 表示返回值为int,接受任意参数的函数,int fun(void) 表示返回值为int的无参函数。
  2. 在C++ 中,int fun() 和int fun(void) 具有相同的意义,都表示返回值为int的无参函数。

 

五、更严格的类型转换

在C++,不同类型的变量一般是不能直接赋值的,需要相应的强转。

 

六、struct类型加强

  1. c中定义结构体变量需要加上struct关键字,c++不需要。
  2. c中的结构体只能定义成员变量,不能定义成员函数。c++即可以定义成员变量,也可以定义成员函数。
//1. 结构体中即可以定义成员变量,也可以定义成员函数
struct Student{
	string mName;
	int mAge;
	void setName(string name){ mName = name; }
	void setAge(int age){ mAge = age; }
	void showStudent(){
		cout << "Name:" << mName << " Age:" << mAge << endl;
	}
};

//2. c++中定义结构体变量不需要加struct关键字
void test01(){
	Student student;
	student.setName("John");
	student.setAge(20);
	student.showStudent();
}

 

七、“新增”bool类型关键字

标准c++的bool类型有两种内建的常量true(转换为整数1)和false(转换为整数0)表示状态。这三个名字都是关键字。

  1. bool类型只有两个值,true(1值),false(0值)
  2. bool类型占1个字节大小
  3. 给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)

 

八、三目运算符功能增强

  1. c语言三目运算表达式返回值为数据值,为右值,不能赋值。
  2. c++语言三目运算表达式返回值为变量本身(引用),为左值,可以赋值。
        int a = 10;
	int b = 20;
	printf("ret:%d\n", a > b ? a : b);


	cout << "b:" << b << endl;
	//返回的是左值,变量的引用
	(a > b ? a : b) = 100;//返回的是左值,变量的引用
	cout << "b:" << b << endl;

 

九、 C/C++中的const

 

 9.1 C中的const

C中的const 是伪常量,

const int arrSize = 10;
int arr[arrSize];

看似是一件合理的编码,但是这将得出一个错误。 因为arrSize占用某块内存,所以C编译器不知道它在编译时的值是多少?

9.2 C++中的const

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值