日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++易错点总结

發布時間:2024/10/14 c/c++ 121 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++易错点总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c++易錯點的話還挺多
1.關于調用拷貝構造函數
(1)使用一個已經創建完畢的對象初始化一個新的對像

p1(p2)

(2)值傳遞的方式給函數參數傳值

#include<iostream>using namespace std;class A{public:A(int c){a=c;} A(A &p){ cout<<"拷貝構造函數!"<<endl; a=p.a;} ~A(){cout<<"析構函數"<<endl; }private:int a;};void text(A a)//實參傳遞給形參的時候會拷貝一個新的函數{}int main(){A a(1);text(a);return 0;}

(3)值方式返回局部對象

#include<iostream>using namespace std;class A{public:A(){cout<<"默認構造!"<<endl; } A(A &p){ cout<<"拷貝構造函數!"<<endl; a=p.a;} ~A(){cout<<"析構函數"<<endl; }private:int a;};A text(){A a; return a;}int main(){A b=text();return 0; }

2.對于c++t源代碼的關鍵字所有的template可以用class替換然而有些class卻不能被template替換
3.通過繼承可以建立類族
4.關于類模板

#include<iostream>#include<string>using namespace std;template<class NameType,class AgeType=int>//類模板在模板參數列表中可以有默認參數 class person{public:person( NameType a,AgeType b){this->age=b;this->name=a;}void show(){cout<<age<<endl;cout<<name<<endl;}NameType name;AgeType age;};void text(){person<string,int>p1("111",1);//類模板沒有自動類型推理p1.show();}int main(){text();return 0; }

5.定義類動態對象數組時其元素只能靠調用該類的默認構造函數初始化
6.類模板不能派生,類模板實例化的對象叫量產(模板類),且量產的類之間沒有任何關系
7.關于動態特性
在絕大多數情況下, 程序的功能是在編譯的時候就確定下來的, 我們稱之為靜態特性。 反之, 如果程序的功能是在運行時刻才能確定下來的, 則稱之為動態特性。C++中, 虛函數,抽象基類, 動態綁定和多態構成了出色的動態特性。
8.派生類子對象就是派生類的數據成員中有其他類的對象,基類子對象是基類數據成員中有其他類的對象
9.只有公有的繼承下派生類是基類的子類型
10.關于子類型:

class base{public:void print()const{cout<<"base::print()"<<endl;}};class derived:public base{public:void fun();};

派生類derived從基類base公有繼承。因此類derived是類base的一個子類型,類derived具備類base中的操作,或者說類base中的操作可以被用于操作類derived的對象。
注:子類型關系具有傳遞性。子類型關系可以傳遞,但是不可逆。

公有繼承可以實現子類型關系。通過公有繼承,派生類得到了基類中除了構造函數、析構函數之外的所有成員,而且可訪問成員的訪問控制屬性也和基類完全相同。這樣,派生類對象就可以作為基類的對象使用,但它只能使用從基類繼承的成員。

具有子類型關系的基類和派生類的對象之間滿足如下賦值兼容規則:

(1)公有派生類的對象可以賦值給基類的對象,即用公有派生類對象中從基類繼承來的成員,逐個賦值給基類對象的成員。
例: derived d;
base b;
b=d;
(2)公有派生類的對象可以初始化基類的引用。
例: derived d;
base &ref=d;
(3)公有派生類的對象的地址可以賦值給指向基類的指針。
例: derived d;
base ptr=&d;
11.轉換函數:
他是一種特殊的類成員函數,轉換函數必須是成員函數,他的聲明不能指定返回類型和參數列表
12.靜態成員函數不能聲明為虛函數
13.看一道題
9.下列語句錯誤的是( B )
A.char name[5]=“John”;name[2]=‘a’; Bcharp=“John”;p[2]=‘a’;
C.char name[5]=“John”,*p=name;p[2]=‘a’;
D.char name[5]=“John”,*p=&name[2];*p='a;
解析B中你構建了一個字符串數組,你把J的首地址返回給了p,但是編譯器會認為你的p是一個字符指針而不是字符數組指針所以p[2]無法使用
如果想讓p[2]能被使用可以如下:

#include<iostream> using namespace std; int main() {char arr[10];for(int i=0;i<10;i++){cin>>arr[i];}char *p=arr;//把一個已知數組的首地址給它;cout<<p[2];return 0;}

14.c++每個類的成員函數隱含的第一個參數的參數名為this指針,指向對象自己;
15.關于枚舉類型,首先它不是基本數據類型,以下面的例子說明:

enum day{monday,tuesday,wednesday,thursday,friday=2 };

枚舉類型的第一個常量默認值是0,而且依次加1,枚舉類型允許彼此的值相等,雖然枚舉類型是整形類,但是不允許使用整數直接給枚舉變量賦值也不允許與整數進行運算,只可以與整數進行比較;
16.(1)const int a和int const a;完全等價其值后續操作不能改變
(2)const int *p與int const *p;完全等價作用均為聲明指向整形常量的整形指針p,指針指向內存空間的內容不可以被修改但指針的指向可以被修改;
(3)int *const p;p所指內存空間的內容可被修改但p指向固定不可以被修改;
17.位運算(化成八位二進制)
(1)~:按位求反,把0變成1把1變成0;
比如二進制1001011
變成0110100
(2)<<:2(2代表向左移動兩位)左移,向左移動右邊補0,>>效果和它類似;
(3)&:兩個二進制1——1得1剩下都是0;
(4)^:相同得0,不同得1;
16.0x+數十六進制,0+數字八進制,e后面不能跟小數
17.c++存儲類別,auto,register,static,extern,mutable;
18.聲明邏輯類型的變量所用的關鍵字是bool;
19.用于控制輸入輸出格式的枚舉常量中代表十進制八進制十六進制的分別是;dec oct hex
20.關于內聯函數:
(1).不能存在任何形式的循環語句
(2).不能存在過多的條件判斷語句
(3).函數體不能過于龐大
(4).不能對函數進行取址操作
內聯函數和宏定義基本類似
優點是減少函數得調用開銷,提高運行效率;
缺點是用時間換取空間,用到內斂的時候都要重新編譯;
內聯函數可以重載;
另外內聯函數和代碼運行的快慢無關;
21.內部函數和外部函數:
內部函數又被稱為靜態函數,只能是本文件使用用static定義
外部函數
22.(1)strcmp(a,b)返回值如果a,b相同返回0,否者返回非0整數;
(2)字符串大小比較,從第一個字符開始比較大小,直到比較出大小為止;
23.數組名代表首地址且不可以改變,比如a[10],不能a=a+1,a叫做地址常量;
數組名作為函數參數,主調函數和被調函數共用一段存儲單元

總結

以上是生活随笔為你收集整理的c++易错点总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。