昨天我正式地接觸到了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,指針自加即指針向後偏移一個類型的大小
- 有多級指針,但是沒有多級引用
- 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
- 使用引用更加安全。