1. 程式人生 > 其它 >二. C++對C的增強

二. C++對C的增強

技術標籤:C++學習總結c++

C++對C的增強可總結為:

1. 全域性變數檢測增強

2. 函式檢測增強:引數型別增強、返回值檢測增強、函式呼叫引數檢測增強

3. 型別轉換檢測增強

4. 結構體struct增強:C++中可以加函式,C使用時不可加函式。另外C使用時必須加struct:(如:struct Person p1),C++可不加

5. bool型別增強,只有真或假

6. 三目運算子增強

7. const增強; C中可以用指標改,而C++不可以

1. 全域性變數檢測增強

int a;
int a = 10;  此會報錯,顯示多重定義,《全域性變數檢測增強》

2. 函式檢測增強:引數型別增強、返回值檢測增強、函式呼叫引數檢測增強

//int getRectS(w, h)   //在C中可跑通,C++報錯
int getRectS(int w, int h)    //
{                               //若無返回值會報錯必須返回一個值
	int g = w * h;
	return g;
}
void test02()
{
//	getRectS(10, 10, 10);            //在C中可跑通
	int g=getRectS(10, 10);
	cout << g << endl;
}

3. 型別轉換檢測增強

void test03()
{//	char* p = malloc(sizeof(04)); //malloc返回值是void* ,C中可跑通,在C++中顯示無法從void*轉化成char*
	char* p = (char*)malloc(sizeof(04));
}

4. 結構體struct增強:C++中可以加函式,C使用時不可加函式。另外C使用時必須加struct:(如:struct Person p1),C++可不加

//4. struct的增強:  C++中可以加函式,C使用時可不加struct
struct Person
{
	int m_Age;
	void plusAge() { m_Age++; };         //c++語言中struct可以加函式,C不行
};

void test04()
{
//	struct Person p1;  //C使用時候必須加入struct關鍵字
	Person p1;             //C++可以不加
	p1.m_Age = 10;
	p1.plusAge();
	cout << p1.m_Age << endl;
}

5. bool型別增強,只有真或假

// 5、bool型別增強(真或假)
bool flag=true;    //只有真或假
void test05()
{
	cout << sizeof(bool) << endl;
}

6. 三目運算子增強

//6. 三目運算子增強
void test06()
{
	int a = 10;
	int b = 20;
//	printf("ret=%d\n", a > b ? a : b);  //C語言中的用法
//  a<b?a:b=100;         //c語言報錯
    (a<b?a:b)=100;         //c++可通過,返回了b等於100,C++返回的是變數

	cout << "ret=" << (a > b ? a : b) << endl;
}

7. const增強; C中可以用指標改,而C++不可以。

C語言中const修飾的常量是偽常量,編譯器會分配記憶體;而C++中不會分配記憶體,編譯器會開闢一臨時空間,臨時空間是看不到的

//7. const增強不可以改,C中可以用指標改
const int m_A = 10;
void test07()
{
	//m_A = 100;
	const int m_B = 20;  //c語言偽常量,C++中為真正的常量
	int* p = (int*)&m_B;             
	*p = 200;                  //*取地址中的值
	cout << "p=" << p << endl;
	cout << "*p="<<*p << endl;
	cout << "m_B=" << m_B << endl;
}
//c語言中const修飾的常量,是偽產量,編譯器會分配記憶體
//C++中,const不會分配記憶體,const int m_B=20;
//編譯器會臨時開闢一個空間,
//如:int tmp=m_B//tmp有記憶體, int *p=(int*)&tmp *p指向的是臨時那塊空間,臨時空間看不到