C++对C的一些简单扩充
- C++的输入和输出
cout << “Hello World!” << endl;
cin >> i ; - 用const定义常量
#define : 实际上,只是在预编译的时候进行字符置换,把程序中出现的字符全部置换为用 define定义的。它既不是变量,没有类型,也不占用存储单元,容易出错。
const : const具有变量的属性,有数据类型,占用存储单元,有地址,可以用指针指向它。
且在运行期间,变量的值是不变的。 const常与指针结合。 - 函数原型的声明
int max(int x, int y)
int max();
max();
都是正确的。 - 函数的重载
函数名相同,参数的类型名和个数可以不相同 - 函数模板
这是C中所没有的
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,凡是函数体相同的函数都可以使用这个模板来代替
#include<iostream>
using namespace std;
template <typename T>
T max()
{
if(B > a) a = b;
if(C > a) a = c;
return 0;
}
- 有默认参数的函数
这是C中没有的
主要是为了方便有时多次调用同一函数时使用同样的实参。
有两种情况:
① 定义(给出默认值)------> 调用
② 声明(给出默认值)------> 调用 ------> 定义(可以不给出默认值) - 变量的引用 (重要)
这是C中没有的
C++中的引用和JAVA中的引用不同,C++ 中变量的“引用”就是变量的别名
int a;
int &b = a;
对变量声明一个引用,并不另开辟空间,都代表同一变量单元。在声明一个引用时,必须同时使之初始化。
C++所以增加“引用“,主要是利用它作为函数参数,以扩充函数传递数据的功能。
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int i = 3, j = 5;
swap(i,j);
cout << "i = " << i << " " << "j = " << j <<endl;
return 0;
}
对引用的进一步说明:
- 不能建立void型引用
- 不能建立引用的数组
- 可以将变量的引用赋给一个指针,此时指针指向的是原来的变量。但是不能定义指向引用类型的指针变量
- 可以建立指针变量的引用
- 可以用const对引用加以限定,不允许改变该引用的值,但是它并不阻止改变引用所代表的变量的值。
- 可以用常量或表达式对引用进行初始化,但此时必须有const做声明。
如:int i = 5; const int &a = i + 3;
此时编译系统是这样处理的:生成一个临时变量,用来存放该表达式的值,引用是该临时变量的别名。
还可以用不同类型的变量对之初始化
如:double d = 3.1415926; const int &a = d;
但是未加constdouble d = 3.1415926; int &a = d;
是错误的
- 内置函数
主要是为了解决:规模很小但是频繁使用的函数(因为反复调用函数会比直接在函数内部实现花费的时间要多)
指定内置函数的方法: 只需在函数首行的左端加一个关键字 inline 即可
#include<iostream>
using namespace std;
inline int max(int a, int b, int c)
{
if(b > a) a = b;
if(c > a) a = c;
return a;
}
int main()
{
int i = 1,j = 2, k = 3,m;
m = max(i,j,k);
return 0;
}
- 作用域运算符号
:: 它能指定所需要的作用域
例如: 要表示全局变量的时候 ::a - 字符串变量 字符串数组
- 动态分配/撤销内存的运算符 new 和 delete
开辟空间以存放一个结构体变量:
#include<iostream>
using namespace std;
struct Student
{
char name[10];
int num;
char sex;
};
int main()
{
Student *p;
p = new Student;
delete p;
return 0;
}
扩展小结:
- 许使用以//开头的注释
- 对变量的定义可以出现在程序的任意行(但必须在该变量的调用之前)
- 提供了标准输入输出流对象 cin cout
- 可以用const定义常量
- 可以利用函数的重载事项同一函数名代表功能类似的函数
- 可以利用函数模板简化同一类函数编程
- 可以使用带默认值的参数的函数
- 引用
- 内置函数
- 作用域运算符
- string类
- new delete