二. C++對C的增強
阿新 • • 發佈:2020-12-29
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指向的是臨時那塊空間,臨時空間看不到