【C++】入門知識

  1. 命名空間
    c/c++中,變量、函數以及類的名稱都是 存在於全局作用域中,可能會導致很多衝突。使用命名空間的目的是對標識符的名稱進行本地化,以避免命名衝突或名字污染。需要用到的關鍵字:namespace。

    1.1 定義命名空間:namespace後面跟命名空間的名字,然後接{ },{ }中位命名空間的成員。
    
namespace N     //N爲空間的名稱
{
//在命名空間中,既可以定義變量,也可以定義函數
	int a;
	int add(int x,int y)
	{
		return x+y;
	}
}

//命名空間的嵌套
namespace A
{
	int a;
	int add(int x, int y)
	{
		return x+y;
	}
namespace B
{
	int b;
	int sub(int x, int y)
	{
		return x-y;
	}
}
}

//同一個工程中允許存在相同名稱的命名空間,編譯器最後會合成一個命名空間中
namespace N
{
	int mul(int x , int y )
	{
		return x*y;
	}
}

//***一個命名空間就定義了一個新的作用域,命名空間中的所有內容都限於該命名空間中***
2.2	命名空間的使用
首先定義一個命名空間
namespace N
{
	int a = 2;
	int add(int x, int y)
	{
		return x + y;
	}

}

在主函數中使用:
在這裏插入圖片描述
會出現錯誤;
所以在主函數中不能直接使用,這裏列舉命名空間使用的三個方法:
a、加命名空間名稱以及作用域限定符

int main()
{
	printf("%d",N::a);
	system("pause");
	return 0;
}

b、使用using將命名空間中成員引入

using N::a;
int main()
{
	printf("%d",a);
	system("pause");
	return 0;
}

c、使用usingnamespace命名空間名稱引入

using namespace N;
int main()
{
	printf("%d\n",a);
	printf("%d",add(a, 20));
	system("pause");
	return 0;
}
  1. 輸入輸出
    cin>>;
    cout<<;
    使用標準輸出和標準輸入時,必須包含頭文件以及std標準命名空間;
#include<iostream>
using namespace std;
int main()
{
	int a;
	int b;
	int c = 28;
	cin >> a;
	cin >> b;

	cout << a << endl;
	cout << b << '+' << c <<'='<< b + c << endl;
	system("pause");
	return 0;
}

在這裏插入圖片描述

  1. 缺省參數
    缺省參數是聲明或定義函數時爲函數的參數指定一個默認值,在調用該函數是,如果沒有指定實參則採用該默認值,否則使用指定的實參。
void test(int a = 7)
{
	cout << a << endl;
}
int main()
{

	test();     //沒有傳參,使用默認值
	test(0);   //有傳參,使用指定的實參
	return 0;
}
缺省值的分類:
a、全缺省值
void test(int a = 10,  int b = 30,int c = 29)
b、半缺省值
void test(int a , int b =78, int c = 33)

需要注意的是:半缺省參數必須從右往左依次來給出,不能間隔着給;缺省值參數不能在函數聲明和定義中同時出現;缺省值必須常量或者全局變量;c語言不支持;

  1. 函數重載
    概念:函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這些同名函數的形參列表(參數個數 或 類型 或 順序)必須不同,常用來處理實現功能類似數據類型不同的問題;
int add(int a, int b)
{
	return a + b;
}
double add(double a , double b)
{
	return a + b;
}
long add(long a, long b)
{
	return a + b;
}

  1. 引用
    概念:不是新定義一個變量,而是給已存在變量取一個別名,編譯器不會爲醫用變量開闢內存空間,它和它引用的變量公用一快地址空間。
int main()
{
	int a = 1;
	int& ra = a;
	printf("%p\n", &a);
	printf("%p", &ra);
	return 0;
}

在這裏插入圖片描述
引用的特性:
1、引用在定義時必須初始化;
2、一個變量可以有多個引用;
3、引用一旦引用一個實體,再不能引用其他實體;
使用場景:
1、做參數

void add(int& a ;int& b)

2、做返回值

int& test(int& a){...}

需要注意的是:如果以引用類型返回,返回值的生命週期必須不受函數的限制
引用和指針的區別:
1、在語法上引用就是一個別名,沒有獨立的空間,在底層上實際是有空間的,因爲引用是按照指針方式來實現的
2、引用必須初始化,指針不需要
3、引用在初始化時引用一個實體後,就不能再引用其他實體;而指針可以在任何時候指向任何一個同類型實體
4、沒有NULL引用,有NULL指針
5、sizeof計算引用類型的大小,指針是地址空間所佔字節大小
6、有多級指針,沒有多級引用
7、指針需要顯示解引用,引用編譯器自己處理
8、引用比指針更安全

  1. 內聯函數
    概念:以inline修飾的函數叫做內聯函數,編譯時C++編譯器會調用內聯函數的地方展開,沒有函數壓棧的開銷,內聯函數提升程序運行效率;
    特點:以空間換時間,遞歸和循環不適用;編譯器自動選擇是否優化;不建議分離申明和定義;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章