昨天我正式地接触到了C++,我了解到了它与C语言的不同。以下是我初识C++的学习笔记。
1.C++的输入输出风格
//C++的输入与输出
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int a;
double b;
char c;
cout << "请输入:";
cin >> a;
cin >> b >> c;
cout << a << endl;
cout << b << " " << c << endl;
system("pause");
return 0;
}
结果如下:
2.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
//缺省参数
#include <iostream>
#include <stdlib.h>
using namespace std;
void TestFunc(int a = 10)
{
cout << a << endl;
}
int main()
{
TestFunc(); //输入会是什么呢?
TestFunc(20); //输出会是什么呢?
system("pause");
return 0;
}
结果如下:
3.函数的重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。
举例如下:
//函数重载
#include <iostream>
#include <stdlib.h>
using namespace std;
int Add(int left, int right)
{
return left + right;
}
double Add(double left, double right)
{
return left + right;
}
long Add(long left, long right)
{
return left + right;
}
int main()
{
cout << "Add(10, 20) = " << Add(10, 20) << endl;
cout << "Add(10.0, 20.0) = " << Add(10.1, 20.0) << endl;
cout << "Add(10L, 20L = " << Add(10L, 20L) << endl;
system("pause");
return 0;
}
结果如下:
请考虑一下情况是否为函数重载呢?
short Add(short left, short right)
{
return left + right;
}
int Add(short left, short right)
{
return left + right;
}
编译器报错:
因为函数名相同且参数列表也相同。
4.引用
“引用”并非定义新变量而是取了别名。编译器不会为引用变量开辟内存空间。它和它引用的变量共用一块内存空间。
测试代码:
//引用
#include <iostream>
#include <stdlib.h>
using namespace std;
void TestRef()
{
int a = 10;
int& ra = a;
printf("&a = %p\n", &a);
printf("&ra = %p\n", &ra);
}
int main()
{
TestRef();
system("pause");
return 0;
}
结果如下:
引用的特性:
- 引用在定义时必须初始化
- 一个变量可以有多个引用
- 引用一旦引用一个实体,再不能引用其他实体
测试代码:
//引用
#include <iostream>
#include <stdlib.h>
using namespace std;
void TestRef()
{
int a = 10;
int& ra = a; //a的引用
int& rra = a;//a的引用
printf("&a = %p\n");
printf("&ra = %p\n");
printf("&rra = %p\n");
}
int main()
{
TestRef();
system("pause");
return 0;
}
结果如下:
引用还可以做函数参数:
void Swap(int& left, int& right)
{
int tmp = left ;
left = right ;
right = tmp ;
}
想想以下代码段会输出什么呢?
#include <iostream>
#include <stdlib.h>
using namespace std;
int& Add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int& ret = Add(1, 2);
Add(3, 4);
cout << "Add(1,2) =" << ret << endl;
system("pause");
return 0;
}
引用和指针的区别:
- 引用在定义时必须初始化,指针没有要求
- 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实
体 - 没有NULL引用,但有NULL指针
- 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4
个字节) - 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
- 有多级指针,但是没有多级引用
- 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
- 使用引用更加安全。