我與代碼的日常: 初識C++

昨天我正式地接觸到了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;
}

結果如下:
在這裏插入圖片描述
引用的特性:

  1. 引用在定義時必須初始化
  2. 一個變量可以有多個引用
  3. 引用一旦引用一個實體,再不能引用其他實體
    測試代碼:
//引用
#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;
}

引用和指針的區別:

  1. 引用在定義時必須初始化,指針沒有要求
  2. 引用在初始化時引用一個實體後,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型實
  3. 沒有NULL引用,但有NULL指針
  4. 在sizeof中含義不同:引用結果爲引用類型的大小,但指針始終是地址空間所佔字節個數(32位平臺下佔4
    個字節)
  5. 引用自加即引用的實體增加1,指針自加即指針向後偏移一個類型的大小
  6. 有多級指針,但是沒有多級引用
  7. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
  8. 使用引用更加安全。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章