C/C++程序基础
C++中::的作用
1、表示”域操作符”
1 | 例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成void A::f(),表示这个f()函数是类A的成员函数。 |
2、直接用在全局函数前,表示是全局函数
3、表示引用成员函数及变量,作用域成员运算符
1 | System::Math::Sqrt()相当于System.Math.Sqrt() |
i++和++i的效率问题
内建数据类型的情况,效率没有区别
自定义数据类型的情况,++i效率较高
交换a,b的值,不使用中间变量
1 | 1、第一种(有可能会发生溢出) |
C和C++有什么不同
C是一个结构化语言,它的重点在于算法和数据结构。对语言本身而言,C是C++的子集。
C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理,得到输出。对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制。
因此,C和C++的最大区别在于,他们用于解决问题的思想方法不一样。
C实现了C++过程化控制及其他相关功能。而在C++中的C,相对于原来的C还有所加强,引入了重载、内联函数、异常处理等。C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等。
在C++中,不仅需要考虑数据封装,还需要考虑对象粒度的选择、对象接口的设计和继承、组合与继承的使用等问题。
相对于C,C++包含了更丰富的设计概念。
C是面向过程化的,但是C++不是完全面向对象化的。在C++中也完全可以写出与C一样过程化的程序,所以只能说C++拥有面向对象的特性。Java是真正面向对象化的
extern “C”
1、被他修饰的目标是”extern”的。就是告诉编译器,其声明的函数和变量可以在本模块或其他模块中使用。通常,在模块的头文件中对本模块提供给其他模块引用的函数和全局变量以关键字”extern”声明。
2、被修饰的目标是”C”的,意思是修饰的变量和函数是按照C语言方式编译和连接的。在编译生成函数的目标代码时,不会对其名字进行特殊处理,也就是不会在后面加上函数参数数量及类型信息相关的那一串。
因此”extern “C” “是C++编译器提供的与C连接交换指定的符号,用来解决名字匹配问题
头文件引用中<>和””的区别
尖括号表示这个文件时一个工程或者标准头文件。查找过程会首先检查预定义的目录。
一对引号则该文件是用户提供的头文件,查找该文件就得从当前文件目录(或文件名指定的其他目录)中寻找文件,然后在标准位置寻找文件。
在main函数执行完后执行的语句
atexit()函数
可以使用atexit()函数来注册程序正常终止时要被调用的函数,并且在main函数结束后时,调用这些函数的顺序与注册他们的顺序相反。