1. 程式人生 > >【C++】改錯題總結

【C++】改錯題總結

1.直接用形參呼叫函式  , 錯因:形參沒有許可權呼叫

2.在類中不能給資料成員賦初值,經常會有題目在類中給資料成員賦值,注意這種做法是錯誤的

3.用 物件.成員函式(引數1,引數2…) ,考點:在類中沒有物件呼叫的相應的成員函式,比如:在類中只定義了成員函式 void fun(int i),在main函式裡,用 物件.fun(2,3,4),這樣是不對的,因為類中沒有定義傳3個引數的fun()函式。

4.考點:指向常量的指標,指標不能做左值操作。 例如:const int * p= &x; *p = y;  *p不可被賦值,因為p為指向常量的指標。

5.考點:有虛擬函式的類是抽象類,抽象類不能被例項化。派生類中不能呼叫初始化積累的物件。

例如:

class A{

  …

 virtual void fun() = 0 ;

  …

}

Class B :public class A

{

  …

  B(int m , int n = 0 ):A(m),j(n){}

  …

}

這裡A(m)就是把A類例項化了,所以錯在這裡

6.考點:模板函式要進行宣告。

在類裡直接用 T x,y; 應該宣告template <class> T ; 這個知識總考。

7.考點:友元函式的使用。 你會在類裡看到一個函式,只有宣告,沒有實現。而在類外則有這個函式的實現,這說明,這個函式是這個類的友元函式,應該在類中這個函式前加上 friend

例如:

在類Base中的void show();應該改成 friend void show();

8.成員函式的返回型別和函式裡return的型別不匹配。

例如:

Int *p;

int get(){

return p

}

p是地址變數,不會是int型別的,所以型別不匹配,錯誤。

9.考點:類中的資料成員,成員函式,預設是private(私有的),所以不能在類外直接呼叫。

10.考點:靜態資料成員賦值規則。

例如:

class A{

static intx;

}

x=5;//靜態資料成員賦值方式錯誤

應該改成:int A :: x = 5 ;

11.考點:常物件不能被更新,用const修飾的,都不能被改變,考生要注意,如果把const修飾的物件、引用等改變了,就錯了

12.考點:許可權問題,把變數或成員函式宣告成了private私有型別,又在類外呼叫,這就錯了,應該改成public或protected

13.考點:對傳引用的理解,在傳引用的時候成員函式定義為 voidswap(int&a,int&b) ,呼叫方法swap(a,b),呼叫的時候傳的是物件。

一些考題裡會在呼叫的時候寫成swap(&a,&b),這就錯了,如果不理解,請看我上一篇部落格

14.考點:類的寫法,成員函式的寫法。類 應該是在{}後加上;表示類的結束,還有一些題裡可能會故意給成員函式少加個括號,考生一定要大膽的把這個括號找出來

相關推薦

C++改錯總結

1.直接用形參呼叫函式  , 錯因:形參沒有許可權呼叫 2.在類中不能給資料成員賦初值,經常會有題目在類中給資料成員賦值,注意這種做法是錯誤的 3.用 物件.成員函式(引數1,引數2…) ,考點:在類中沒有物件呼叫的相應的成員函式,比如:在類中只定義了成員函式 void

C#—三層總結

前言 三層敲完之後,有很多不理解的,程式碼直接看的視訊並不知道之間的值是怎麼傳的,後來逐句除錯了幾遍,把每句話的程式碼基本都寫上了,逐漸理解了。 三層是什麼 三層架構把整個軟體分為了三個層次:表現層(User Interface layer)、業務邏輯層(Bus

C++C++string類總結

ont cst number 開始 RoCE 模板 tro sig def 首先,為了在程序中使用string類型,必須包含頭文件 <string>。如下: #include <string> 註意這裏不是string.h,stri

c++STL裡的priority_queue用法總結

https://blog.csdn.net/xiaoquantouer/article/details/52015928  1、標頭檔案 #include<queue> 2、定義 priority_queue<int> p; 3、優先輸出大資料

EOJ Monthly 2018.12 - A,B,C訓練,部分題解

A. 題幹: A. 仰望星空 單測試點時限: 2.0 秒 記憶體限制: 512 MB 你就這樣靜坐在草地上,離我稍遠的地方。 我用眼角瞅著你,你什麼話也別說。 語言是誤會的根源。 但是,每天,你可以坐得離我近一些…… 你和她一起仰頭仰望著佈滿星辰的天空

C++使用sizeof計算類物件所佔空間大小-sizeof總結

 決定C ++中物件的大小的因素: 1.所有非靜態資料成員的大小 2.資料成員的順序 3.位元組對齊或位元組填充 4.其直接基類的大小虛擬函式的存在 5.  正在使用的編譯器 6.繼承模式(虛擬繼承) 一、使用sizeof計算類物件所佔空間大小

C++STL常用容器總結之十二:string類

13、string類 宣告 string類本不是STL的容器,但是它與STL容器有著很多相似的操作,因此,把string放在這裡一起進行介紹。 之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必擔心記憶體是

C#建構函式疑問點總結

前言 在學習C#的過程中,建構函式中的很多知識細節我感覺還是有必要總結一下的。 問題總結 一、建構函式的作用是什麼? 建構函式的主要作用是在建立物件(宣告物件)時初始化物件,一個類被定義時至少要有一個建構函式,如果定義類時沒有宣告建構函式,則系統會提供一個預設的無參建構函式。 二、如何理

第十七週oj刷——Problem B: 分數類的四則運算C++

Description 編寫分數類Fraction,實現兩個分數的加、減、乘和除四則運算。主函式已給定。 Input 每行四個數,分別表示兩個分數的分子和分母,以0 0 0 0 表示結束。 Output 空格分隔的兩個分數的減和除的結果。 Sample Inpu

C++STL常用容器總結之四:連結串列list

5、連結串列list List是每個節點包含前驅指標、後繼指標和資料域三個部分的雙向連結串列。List不提供隨機存取,訪問元素需要按順序走到需存取的元素,時間複雜度為O(n),在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。

C++STL常用容器總結之八:對映map

9、對映map Map是鍵-值對的集合,map中的所有元素都是pair,可以使用鍵作為下標來獲取一個值。Map中所有元素都會根據元素的值自動被排序,同時擁有實值value和鍵值key,pair的第一元素被視為鍵值,第二元素被視為實值,同時map不允許兩個元素有

C++STL常用容器總結之五:雙端佇列deque

6、雙端佇列deque 所謂的deque是”double ended queue”的縮寫,雙端佇列不論在尾部或頭部插入元素,都十分迅速。而在中間插入元素則會比較費時,因為必須移動中間其他的元素。雙端佇列是一種隨機訪問的資料型別,提供了在序列兩端快速插入和刪除操

C++STL常用容器總結之九:集合set

10、集合set Map容器是鍵值對的集合,而set容器只是單純的鍵的集合,當只想知道一個值是否存在時,使用set容器是最合適的。在set中,所有元素都會根據其鍵值被自動排序,同時set中不允許兩個元素有相同的鍵值。 1、set容器的一些操作 Set容

C++STL常用容器總結之一:容器與迭代器

宣告: 1、本博文主要整理自《C++ Primer》和《STL原始碼剖析》這兩本經典書籍。同時,也參考了網路中不少優秀部落格,對這些部落格的作者表示感謝。 2、由於博主能力有限,對於一些容器的用法可能尚未進行深入研究。因此,本博文若有錯誤和不足之處,歡迎大家

C++STL常用容器總結之十一:容器小結

12、容器小結 1、容器的選用 Vector和deque容器提供了對元素的快速訪問,但付出的代價是,在容器的任意位置插入或刪除元素,比在容器尾部插入和刪除的開銷更大,因為要保證其連續儲存,需要移動元素;list型別在任何位置都能快速插入和刪除,因為不需要

C#知識點總結(一)

一、概念:.net與c# . net/dotnet:一般指 .Net  Framework框架,一種平臺,一種技術。 C#(sharp):一種程式語言,可以開發基於.net平臺的應用。 Java是一種技術、一種程式語言。   二、.net能幹什麼(必須掌握)

Java基礎總結-演算法總結

常見資料結構和演算法程式設計題 1.二叉樹的深度 public class Solution { public int TreeDepth(TreeNode root) { if (root == null) {

CC語言中識別符號宣告的幾個關鍵字總結

C語言中宣告一個名稱就是把一個識別符號與某個C語言物件相關聯,如變數、函式或型別,C語言中可以宣告的名稱包括:變數、函式、型別、型別標誌、結構成員與聯合成員、列舉常量、語句標號和前處理器巨集。除了語句標

CC專家程式設計》核心知識點總結

1、穿越時空的迷霧 編譯器設計者的金科玉律:效率幾乎就是一切,這包括兩個方面,編譯效率和執行效率,而後者起決定性作用。有很多編譯優化措施會延長編譯時間,但卻能縮短執行時間;還有一些優化措施如清除誤用程式碼和忽略執行時檢查等,既能縮短編譯時間,又能減少執

LeetCode第一C++)

問題  給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] +