1. 程式人生 > >【C++】C++瑣碎的知識點

【C++】C++瑣碎的知識點

1.類不佔用儲存空間,它僅僅給出資料型別的說明。而物件是佔用儲存空間的。這點類似於int,float這種系統預定義型別,int和float不佔用儲存空間,但是比如:int a;a佔用儲存空間。

2.系統會在靜態儲存區給常變數分配記憶體單元,而普通變數是在動態儲存區分配記憶體單元。3.const int *p=NULL;表示定義一個指向const變數的指標p。如果一個變數已經被宣告為常變數,只能用指向const變數的指標指向它,而不能用一般的(指向非const變數的)指標指向它。指向常變數的指標除了可以指向常變數以外,還可以指向普通變數。此時,可以通過指標訪問該變數,但是不能通過指

針改變該變數的值。

4.const int *p和int *const p的區別

#include <iostream>
using namespace std;

int main()
{
	const int *p = NULL;//定義一個指向const變數的指標p
	const int a = 10;//定義一個常變數
	p = &a;
	cout << "*p=" << *p << endl;
	int b = 100;//定義普通變數b
	p = &b;
	cout << "*p=" << *p << endl;
	//*p=200;錯誤,不能通過指標p修改p所指向的單元內容
	b = 200;
	cout << "*p=" << *p << endl;
	return 0;
}

以上程式碼的指標p是指向常變數的,所以不能通過*p來修改常變數的值,哪怕指標指向非常變數,也不能修改。
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int b = 20;
	int *const p = &a;//定義const指標p並初始化指向a
	cout << "*p=" << *p << endl;
	//p=&b;錯誤,不能改變const指標p的指向
	*p = 100;
	cout << "*p=" << *p << endl;
	return 0;
}

第二個程式碼中的p指標是一個const指標,所以這個指標的指向不可以改變,但是指標所指的資料可以改變。

5.成員的可訪問性可分為三類:公有的,受保護的,私有的。訪問屬性為公有屬性的成員既可以被本類的成員函式訪問,也可以在類的作用域內被其它函式訪問。訪問屬性為受保護的成員可以被本類以及派生類的成員函式訪問,但不能被類外訪問。訪問屬性為私有的成員只能被本類的成員函式訪問而不能被類外訪問(類的友元函式除外)。

6.宣告類時系統並不分配記憶體空間,而定義物件時系統會給每個物件分配記憶體單位,以儲存物件的成員。

7.內建函式(inline函式)的機制是在編譯的時候將被呼叫函式的程式碼嵌入到主呼叫函式的呼叫語句,這樣可以提高了程式的執行效率。當函式的函式體很小的時候,函式呼叫的時間開銷是非常明顯的。當類中的成員函式是在類內定義的,C++系統會預設該成員函式是inline成員函式。此時無需在函式定義前面加上inline關鍵字。

8.在系統給例項化的物件分配儲存空間,只給資料分配儲存空間,而將物件的成員函式放在另外一個公共區域,無論這個類宣告多少個物件,這些物件的成員函式在記憶體中只保留一份。

9.聚合和組合的關係:聚合關係中成員物件可以脫離整體物件獨立存在,而組合關係中的部分和整體具有統一的生命週期。一旦整體物件不存在,部分物件也將不存在。