2018-2019 C++期末复习资料
//等我考完高數再開始寫 😄
寫錯兩道選擇題?..
如有錯誤,歡迎指正
寫題的時候翻了很多書也查了很多資料,但還是可能會有錯誤或者理解有偏差的地方,望諒解!
一、選擇題
下面對于類的描述,是正確的是( B )// 之前寫錯了… =_=…
A.類是抽象數據類型的實現
通常采用類來實現對抽象數據類型的封裝
B.類是具有共同行為和屬性的若干對象的統一描述體
C.所有的類都能創建對象
如果一個類中有純虛函數,那么它就是一個抽象類,不能用建立對象
D.類就是C語言中的結構類型
下列關于C++函數的說明中,正確的是 ( C )
A.內聯函數就是定義在另一個函數體內部的函數
B.函數體的最后一條語句必須是return語句
C.標準C++要求在調用一個函數之前,必須先聲明其原型
D.編譯器會根據函數的返回值類型和參數表來區分函數的不同重載形式
下列不是描述類的成員函數的是 ( C )
A.構造函數 B.析構函數
C.友元函數 D.拷貝構造函數
構造函數不具備的特征的是 ( D )
A.構造函數的函數名與類名相同 B.構造函數可以重載
C.構造函數可以設置默認參數 D.構造函數必須指定類型說明
下面有關重載函數的說法中正確的是( C )
A.重載函數必須具有不同的返回值類型
B.重載函數形參個數必須不同
C.重載函數必須有不同的形參列表
D.重載函數名可以不同
下面關于C++中類的繼承與派生的說法錯誤的是( C )
A.基類的protected成員在公有派生類的成員函數中可以直接使用
B.基類的protected成員在私有派生類的成員函數中可以直接使用
C.有派生時,基類的所有成員訪問權限在派生類中保持不變
D.繼承可以分為單一繼承與多重繼承
下面關于運算符重載的描述錯誤的是( C )
A.運算符重載不能改變操作數的個數、運算符的優先級、運算符的結合性和運算符的語法結構
B.不是所有的運算符都可以進行重載
C.運算符函數的調用必須使用關鍵字operator
D.在C++語言中不可通過運算符重載創造出新的運算符
關于虛函數的描述中,( C )是正確的。
A.虛函數是一個static類型的成員函數
B.虛函數是一個非成員函數
C.基類中說明了虛函數后,派生類中將其對應的函數可不必說明為虛函數
D.派生類的虛函數與基類的虛函數具有不同的參數個數和類型
假定AB為一個類,則執行AB x;語句時將自動調用該類的 ( B )
A.有參構造函數 B.無參構造函數
C.拷貝構造函數 D.賦值構造函數
下面關于編寫異常處理代碼規則中不正確的是 ( B )
A. 可以有數量不限的catch處理程序出現在try塊之后,在try 塊出現之前不能出現catch塊。
B. try塊中必須包含throw語句。
C. 在關鍵字catch之后的圓括號內的數據聲明必須包括其類型聲明。
D.如果catch中處理程序執行完畢,而無返回或終止指令將跳過后面的catch塊繼續執行
關于類和對象,下列說法不正確的是 ( C )
A.對象是類的一個實例
B.任何一個對象必定屬于一個特定的類
C.一個類只能有一個對象
D.類與對象的關系類似于數據類型與變量的關系
下列敘述中,不正確的是 ( B )
A.類的構造函數可以重載
B.類的析構函數可以重載
C.一個類可以不定義構造函數
D.一個類可以不定義析構函數
關于靜態數據成員,下列描述正確的是 ( A )
A.在對象創建之前就存在了靜態數據成員
靜態數據成員不隨對象的建立而分配空間,也不隨對象的撤銷而釋放(一般數據成員是在對象建立時分配空間,在對象撤銷時釋放)。靜態數據成員是在程序編譯時被分配空間的,至程序結束時才釋放空間。
B.靜態數據成員只能被靜態成員函數訪問
靜態數據成員可以被非靜態成員函數訪問。但靜態成員函數只能訪問靜態數據成員。
C.不能在構造函數中對靜態數據成員賦值
D.對靜態數據成員的訪問不受訪問權限的限制
和其他數據成員一樣,靜態數據成員也遵守public/protected/private訪問規則。注意:僅僅是初始化時不遵守public/protected/private的規則,靜態數據成員只能在類外初始化。
下列對派生類的描述中,( D ) 是錯誤的。
A.一個派生類可以做另一個派生類的基類
B.派生類至少有一個基類
C.派生類的成員除了它自己的成員外,還包括了它的基類的成員
D.派生類中繼承的基類成員的訪問權限到派生類保持不變
與繼承方式有關。詳情出門左拐:C++類中的三種繼承方式`
關于虛函數的描述中,( A )是正確的。
A.基類中說明了虛函數后,派生類中將其對應的函數可不必說明為虛函數
B.虛函數是一個static類型的成員函數
virtual類型
C.虛函數是一個非成員函數
D.派生類的虛函數與基類的虛函數具有不同的參數個數和類型
需要具有一樣的參數,否則為重載函數
下列敘述,不正確的是 ( B )
A.純虛函數是一個特殊的虛函數,它沒有具體的實現。
B.一個基類中說明有純虛函數,該基類的派生類一定不再是抽象類
若沒有將該純虛函數實現,則仍為抽象類
C.抽象類是指具有純虛函數的類
D.抽象類只能作為基類來使用,其純虛函數的實現由派生類給出
關于函數模板,描述錯誤的是 ( D ) //之前寫錯了
A.函數模板必須由程序員實例化為可執行的函數模板
B.函數模板的實例化由編譯器實現。
C.一個類定義中,只要有一個函數模板,則這個類既可以是類模板,也可以是函數模板
D.類模板的成員函數都是函數模板,類模板實例化后,成員函數也隨之實例化
在C++中,數據封裝要解決的問題是 ( D )
A.數據的規范化
B.便于數據轉換
C.避免數據丟失
D.防止不同模塊之間數據的非法訪問
假定MyClass為一個類,則執行MyClass a[3],*p[2];語句時,自動調用該類構造函數 ( B )次。
A.2 B.3 C.4 D.5
生成對象a[3]時會調用3次,定義指針*p[2]不會調用構造函數。若寫為MyClass *p=new MyClass,則會調用構造函數
對于下面的類MyClass,在函數f()中將MyClass對象的數據成員n的值修改為50的語句應該是 ( C )
A.MyClass(50); B.SetNum(50);
C.ptr->SetNum(50) ; D.ptr->n = 50;
友員運算符_left>_right被C++編譯器解釋為 ( A )
A.operator >(_left, _right) B. >(_left, _right)
C._right.operator >(_left) D._left.operator >( _right)
對雙目運算符而言,成員運算符函數帶有一個參數,而友元運算符函數帶有兩個參數
注:雙目運算符:運算所需變量為兩個的運算符叫做雙目運算符,或者要求運算對象的個數是2的運算符稱為雙目運算符
派生類的構造函數的成員初始化列表中,不能包含 ( C )
A.基類的構造函數
B.派生類中子對象的初始化
C.基類中子對象的初始化
派生類的構造函數會調用基類的構造函數,并傳遞參數,但并不能直接在派生類的構造函數中初始化基類
D.派生類中一般數據成員的初始化
派生類的構造函數除了要負責本類成員的初始化外,還要調用基類和對象成員的構造函數,并向它們傳遞參數,以完成基類子對象和對象成員的建立和初始化
派生類只能采用構造函數初始化列表的方式向基類或者對象成員的構造函數傳遞參數
補充:
類的子對象 或 基類的子對象:指定義在類里面的對象成員
基類子對象:按照書上的說法應該指的是派生類對象中的基類成員,可以理解為是派生類中包含了基類的一個副本。(這個概念看看就好了,我在網上看了很多,但說法不一)
下面關于C++中類的繼承與派生的說法錯誤的是 ( C )
A.基類的protected成員在公有派生類的成員函數中可以直接使用
B.基類的protected成員在私有派生類的成員函數中可以直接使用
C.私有派生時,基類的所有成員訪問權限在派生類中保持不變
D.繼承可以分為單一繼承與多重繼承
出門左拐:C++類中的三種繼承方式
下列關于虛基類的描述中,錯誤的是 ( B )
A.虛基類子對象的初始化由最終的派生類完成
B.虛基類子對象的初始化次數與虛基類下面的派生類個數有關
只初始化一次,在最終派生類中進行初始化
C.設置虛基類的目的是消除二義性
D.帶有虛基類的多層派生類構造函數的成員初始化列表中都要列出對虛基類構造函數的調用
虛基類子對象由最終派生類的構造函數通過調用虛基類的構造函數進行初始化(最終派生類的構造函數的成員初始化列表中必須列出對虛基類構造函數的調用,否則,表示使用該虛基類的缺省構造函數)。
由于最終派生類總是相對的,因此,從虛基類直接或間接派生的派生類中的構造函數的成員初始化列表中都要列出對虛基類構造函數的調用。但只有用于建立對象的最終派生類的構造函數才調用虛基類的構造函數,此時最終派生類的所有基類中列出的對虛基類的構造函數的調用在執行過程中都會被忽略,從而保證虛基類子對象只初始化一次。
關于虛函數的描述中正確的是 ( D )
A.虛函數是一個static類型的成員函數
B.虛函數是一個非成員函數
C.虛函數既可以在函數說明時定義,也可以在函數實現時定義
D.派生類的虛函數與基類的虛函數具有相同的參數個數和類型
關于純虛函數和抽象類的描述中錯誤的是 ( C )
A.純虛函數是一種特殊的虛函數,它沒有具體的實現
B.抽象類是指具有純虛函數的類
C.一個基類中說明有純虛函數,該基類的派生類一定不再是抽象類
有可能派生類只是簡單地繼承了抽象類地純虛函數,并沒有覆蓋它,所以派生類也是一個抽象類
D.抽象類只能作為基類來使用,其純虛函數的實現由派生類給出
下列對模板的聲明,正確的是 ( C )
A. template
B. template<typename T1,T2>
C. template<typename T1,class T2>
D. template<typename T1;typename T2>
已定義了一個類A并有語句A* pa=new A(5); 那么以下說法正確的是( A )
A. 該語句會創建A類的一個對象,并將此對象的地址賦給指針pa;
B. 該語句會創建A類的5個對象,且它們的地址是連續的;
C. 當指針變量pa超出其作用域時,pa和為對象分配的空間都將被自動釋放;
D. 類A中一定有一個顯式定義的構造函數和一個顯式定義的虛析構函數;
定義類A的非靜態成員函數A& f(A& one)時,需有語句return exp;則exp不能是( B )
A.類A中類型為A的靜態數據成員
B.f中用語句A a = one; 定義的量a
C.one
D.*this
與變量的生存期相關,B中的a在出了函數f()后立即死亡,所以返回的引用是空的,而A C D中返回的東西,在出了函數f()之后仍然生存
在一個類中,下列哪些成員可以是多個? ( D )
A. 無參構造函數
B. 析構函數
C. 原型相同的非靜態成員函數
D. 靜態成員函數
對類T中的下列成員,若不考慮代碼優化,一般來說它們中的哪個執行起來最慢? ( C )
A. 缺省的無參構造函數
即為默認構造函數
B. 缺省的拷貝構造函數
C. T f( ) { T t; return t; }
D. 不能判定A、B、C哪個最慢
對函數原型為int& min(int& a, int& b);的全局函數,下列語句塊哪個是錯誤的: ( C )
A. int x=10,y=5; min(x,y)=100;
B. int x=10,y=5, z; z=min(x,y+=x);
C. int x=10,y=5; min(x,10)=y;
傳參過程中會發生錯誤,int& b=10(錯誤) 引用的右邊必須是一個變量
D. int x=10,y=5; x=min(x,y);
關于拷貝構造函數錯誤的說法有:( B )
A. 拷貝構造函數是一種特殊的構造函數,且不能在類中進行函數重載。
B. 若自定義派生類的拷貝構造函數,那么也必須自定義基類的拷貝構造函數。
C. 通常拷貝構造函數只能有一個參數,且為常量引用或非常量引用。
D. 拷貝構造函數不允許在函數體中使用return語句。
下列對虛基類聲明正確的是:( B )
A. class virtual B: public A
B. class B: virtual public A
C. class B: public A virtual
D. virtual class B: public A
若有語句A*const p=new B;,其中類B是從類A直接派生得到的,那么下列說法錯誤的是: ( D )
A. 若要執行語句p->f( ),那么類A中一定有一個與f( )函數匹配的函數聲明。
B. 類B一定是通過public繼承方式從類A派生的。
C. 類B的構造函數中,至少有一個無參的或提供全部缺省參數的構造函數。
D. 通過指針p,只能訪問類中的常量成員函數或靜態成員函數。
下面說明的哪個數據不能作為類T的數據成員定義:( D )
A. T* pT
B. class Q{ } q1,q2;
C. static T t;
D. const T t;
下列哪種運算符可以被重載: ( D )
A. sizeof
B. ::
C. ? :
D. [ ]
二、程序改錯題,指出程序中的錯誤語句并分析錯誤原因
構造函數初始化列表的執行時間:
#mermaid-svg-KpMbYTnBXB4QCfWV .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .label text{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .node rect,#mermaid-svg-KpMbYTnBXB4QCfWV .node circle,#mermaid-svg-KpMbYTnBXB4QCfWV .node ellipse,#mermaid-svg-KpMbYTnBXB4QCfWV .node polygon,#mermaid-svg-KpMbYTnBXB4QCfWV .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-KpMbYTnBXB4QCfWV .node .label{text-align:center;fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .node.clickable{cursor:pointer}#mermaid-svg-KpMbYTnBXB4QCfWV .arrowheadPath{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-KpMbYTnBXB4QCfWV .flowchart-link{stroke:#333;fill:none}#mermaid-svg-KpMbYTnBXB4QCfWV .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-KpMbYTnBXB4QCfWV .edgeLabel rect{opacity:0.9}#mermaid-svg-KpMbYTnBXB4QCfWV .edgeLabel span{color:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-KpMbYTnBXB4QCfWV .cluster text{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-KpMbYTnBXB4QCfWV .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-KpMbYTnBXB4QCfWV text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-KpMbYTnBXB4QCfWV .actor-line{stroke:grey}#mermaid-svg-KpMbYTnBXB4QCfWV .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-KpMbYTnBXB4QCfWV #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .sequenceNumber{fill:#fff}#mermaid-svg-KpMbYTnBXB4QCfWV #sequencenumber{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV #crosshead path{fill:#333;stroke:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .messageText{fill:#333;stroke:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-KpMbYTnBXB4QCfWV .labelText,#mermaid-svg-KpMbYTnBXB4QCfWV .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-KpMbYTnBXB4QCfWV .loopText,#mermaid-svg-KpMbYTnBXB4QCfWV .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-KpMbYTnBXB4QCfWV .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-KpMbYTnBXB4QCfWV .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-KpMbYTnBXB4QCfWV .noteText,#mermaid-svg-KpMbYTnBXB4QCfWV .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-KpMbYTnBXB4QCfWV .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-KpMbYTnBXB4QCfWV .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-KpMbYTnBXB4QCfWV .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-KpMbYTnBXB4QCfWV .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .section{stroke:none;opacity:0.2}#mermaid-svg-KpMbYTnBXB4QCfWV .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-KpMbYTnBXB4QCfWV .section2{fill:#fff400}#mermaid-svg-KpMbYTnBXB4QCfWV .section1,#mermaid-svg-KpMbYTnBXB4QCfWV .section3{fill:#fff;opacity:0.2}#mermaid-svg-KpMbYTnBXB4QCfWV .sectionTitle0{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .sectionTitle1{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .sectionTitle2{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .sectionTitle3{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-KpMbYTnBXB4QCfWV .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .grid path{stroke-width:0}#mermaid-svg-KpMbYTnBXB4QCfWV .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-KpMbYTnBXB4QCfWV .task{stroke-width:2}#mermaid-svg-KpMbYTnBXB4QCfWV .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .taskText:not([font-size]){font-size:11px}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-KpMbYTnBXB4QCfWV .task.clickable{cursor:pointer}#mermaid-svg-KpMbYTnBXB4QCfWV .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KpMbYTnBXB4QCfWV .taskText0,#mermaid-svg-KpMbYTnBXB4QCfWV .taskText1,#mermaid-svg-KpMbYTnBXB4QCfWV .taskText2,#mermaid-svg-KpMbYTnBXB4QCfWV .taskText3{fill:#fff}#mermaid-svg-KpMbYTnBXB4QCfWV .task0,#mermaid-svg-KpMbYTnBXB4QCfWV .task1,#mermaid-svg-KpMbYTnBXB4QCfWV .task2,#mermaid-svg-KpMbYTnBXB4QCfWV .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutside0,#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutside2{fill:#000}#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutside1,#mermaid-svg-KpMbYTnBXB4QCfWV .taskTextOutside3{fill:#000}#mermaid-svg-KpMbYTnBXB4QCfWV .active0,#mermaid-svg-KpMbYTnBXB4QCfWV .active1,#mermaid-svg-KpMbYTnBXB4QCfWV .active2,#mermaid-svg-KpMbYTnBXB4QCfWV .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-KpMbYTnBXB4QCfWV .activeText0,#mermaid-svg-KpMbYTnBXB4QCfWV .activeText1,#mermaid-svg-KpMbYTnBXB4QCfWV .activeText2,#mermaid-svg-KpMbYTnBXB4QCfWV .activeText3{fill:#000 !important}#mermaid-svg-KpMbYTnBXB4QCfWV .done0,#mermaid-svg-KpMbYTnBXB4QCfWV .done1,#mermaid-svg-KpMbYTnBXB4QCfWV .done2,#mermaid-svg-KpMbYTnBXB4QCfWV .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-KpMbYTnBXB4QCfWV .doneText0,#mermaid-svg-KpMbYTnBXB4QCfWV .doneText1,#mermaid-svg-KpMbYTnBXB4QCfWV .doneText2,#mermaid-svg-KpMbYTnBXB4QCfWV .doneText3{fill:#000 !important}#mermaid-svg-KpMbYTnBXB4QCfWV .crit0,#mermaid-svg-KpMbYTnBXB4QCfWV .crit1,#mermaid-svg-KpMbYTnBXB4QCfWV .crit2,#mermaid-svg-KpMbYTnBXB4QCfWV .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-KpMbYTnBXB4QCfWV .activeCrit0,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCrit1,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCrit2,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-KpMbYTnBXB4QCfWV .doneCrit0,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCrit1,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCrit2,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-KpMbYTnBXB4QCfWV .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-KpMbYTnBXB4QCfWV .milestoneText{font-style:italic}#mermaid-svg-KpMbYTnBXB4QCfWV .doneCritText0,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCritText1,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCritText2,#mermaid-svg-KpMbYTnBXB4QCfWV .doneCritText3{fill:#000 !important}#mermaid-svg-KpMbYTnBXB4QCfWV .activeCritText0,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCritText1,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCritText2,#mermaid-svg-KpMbYTnBXB4QCfWV .activeCritText3{fill:#000 !important}#mermaid-svg-KpMbYTnBXB4QCfWV .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-KpMbYTnBXB4QCfWV g.classGroup text .title{font-weight:bolder}#mermaid-svg-KpMbYTnBXB4QCfWV g.clickable{cursor:pointer}#mermaid-svg-KpMbYTnBXB4QCfWV g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-KpMbYTnBXB4QCfWV g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-KpMbYTnBXB4QCfWV .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-KpMbYTnBXB4QCfWV .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-KpMbYTnBXB4QCfWV .dashed-line{stroke-dasharray:3}#mermaid-svg-KpMbYTnBXB4QCfWV #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV .commit-id,#mermaid-svg-KpMbYTnBXB4QCfWV .commit-msg,#mermaid-svg-KpMbYTnBXB4QCfWV .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-KpMbYTnBXB4QCfWV g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-KpMbYTnBXB4QCfWV g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-KpMbYTnBXB4QCfWV g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-KpMbYTnBXB4QCfWV .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-KpMbYTnBXB4QCfWV .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-KpMbYTnBXB4QCfWV .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-KpMbYTnBXB4QCfWV .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-KpMbYTnBXB4QCfWV .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-KpMbYTnBXB4QCfWV .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-KpMbYTnBXB4QCfWV .edgeLabel text{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KpMbYTnBXB4QCfWV .node circle.state-start{fill:black;stroke:black}#mermaid-svg-KpMbYTnBXB4QCfWV .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-KpMbYTnBXB4QCfWV #statediagram-barbEnd{fill:#9370db}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-state .divider{stroke:#9370db}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-KpMbYTnBXB4QCfWV .note-edge{stroke-dasharray:5}#mermaid-svg-KpMbYTnBXB4QCfWV .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-KpMbYTnBXB4QCfWV .error-icon{fill:#522}#mermaid-svg-KpMbYTnBXB4QCfWV .error-text{fill:#522;stroke:#522}#mermaid-svg-KpMbYTnBXB4QCfWV .edge-thickness-normal{stroke-width:2px}#mermaid-svg-KpMbYTnBXB4QCfWV .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-KpMbYTnBXB4QCfWV .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-KpMbYTnBXB4QCfWV .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-KpMbYTnBXB4QCfWV .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-KpMbYTnBXB4QCfWV .marker{fill:#333}#mermaid-svg-KpMbYTnBXB4QCfWV .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-KpMbYTnBXB4QCfWV {color: rgba(0, 0, 0, 0.75);font: ;}類內初始值構造函數初始化列表構造函數體下列類成員必須采用類內初始值或構造函數初始化列表進行初始化:
補充:
靜態成員、常量成員都不能在類內初始化。但靜態整型常量成員可以在類內初始化如:static const int
靜態成員函數的說明和定義與靜態數據成員一樣,函數可以實現在類體內,也可以實現在類體外
另:為什么static成員變量一定要在類外初始化?
補充:當出現二義性的命名沖突的時候可以指明調用成員函數所屬類來解決
三、閱讀程序,寫出程序的運行結果
#include<iostream> using namespace std; class Implementation{ public:Implementation(int y){value=y;}void setValue(int v){value=v;}int getValue() const {return value;} private:int value; }; class Interface{ public:Interface(int);void setValue(int);int getValue() const; private:Implementation *ptr; }; Interface::Interface(int v):ptr(new Implementation(v)){} void Interface::setValue(int v){ptr->setValue(v);} int Interface::getValue() const {return ptr->getValue();} void main() {Interface i(5);cout<<i.getValue()<<endl;i.setValue(10);cout<<i.getValue()<<endl; } 運行結果: 5 10 #include<iostream> using namespace std; class B1 { public:B1(int a){cout<<"constructing B1 "<<a<<endl;} };class B2:public B1{ public:B2(int b,int a):B1(a){cout<<"constructing B2 "<<b<<endl;} };class B3:public B2 { public:B3(int a,int b,int c,int d,int e):B2(a,b),memberB2(c,d),memberB1(e){cout<<"constructing B3"<<endl;} private:B1 memberB1;B2 memberB2; };void main() {B3 b3(1,2,3,4,5); } 運行結果: constructing B1 2 constructing B2 1 constructing B1 5 constructing B1 4 constructing B2 3 constructing B3附:
一個派生類構造函數的執行順序:
第一步執行:虛擬基類的構造函數(多個虛擬基類則按照繼承的順序執行構造函數)。
第二步執行:基類的構造函數(多個普通基類也按照繼承的順序執行構造函數)。
第三步執行:類類型的成員對象的構造函數(按照初始化順序)。
第四部執行:派生類自己的構造函數。
++i:先增再用
i++:先用再增
inf 表示無窮大,因為得到的數值,超出浮點數的表示范圍
#include<iostream.h> class Sample { int n; static int sum; public:Sample(int x){n=x; }void add(){sum+=n;}void disp(){cout << "n=" << n << ",sum=" << sum << endl; } }; int Sample::sum=0;//靜態數據成員賦初值 void main() { Sample a(2),b(3),c(5); a.add(); a.disp(); b.add(); b.disp(); c.add(); c.disp(); } 運行結果: n=2,sum=2 n=3,sum=5 n=5,sum=10 #include <iostream> using namespace std; class B { public: B(){ cout<<"Constructing B"<<endl;} };class B1:virtual public B { public: B1(int i){ cout<<"Constructing B1"<<endl; } }; class B2:virtual public B { public: B2(int j){ cout<<"Constructing B2"<<endl; } };class D: public B1, public B2 { public:D(int m,int n): B1(m),B2(n){ cout<<"Constructing D"<<endl; } }; void main(){D d(1,2); } 運行結果: Constructing B Constructing B1 Constructing B2 Constructing D這個題考查的是虛基類
虛基類子對象由最終派生類的構造函數通過調用虛基類的構造函數進行初始化(最終派生類的構造函數的成員初始化列表中必須列出對虛基類構造函數的調用,否則,表示使用該虛基類的缺省構造函數)。
由于最終派生類總是相對的,因此,從虛基類直接或間接派生的派生類中的構造函數的成員初始化列表中都要列出對虛基類構造函數的調用。
但只有用于建立對象的最終派生類的構造函數才調用虛基類的構造函數,此時最終派生類的所有基類中列出的對虛基類的構造函數的調用在執行過程中都會被忽略,從而保證虛基類子對象只初始化一次。
要注意拷貝構造函數的調用!!
#include <iostream> using namespace std; class A {int a; public: A(int i){ cout<<"Constructing A "<<i<<endl; } }; class B { public: B(){ cout<<"Constructing B "<<endl;} };class B1: public B ,virtual public A{ public: B1(int i):A(i){ cout<<"Constructing B1 "<<i<<endl; } }; class B2:virtual public A,public B { public: B2(int j):A(j){ cout<<"Constructing B2 "<<j<<endl; } };class D: public B1, public B2 { public:D(int m,int n): B1(m),B2(n),a(3),A(4){ cout<<"Constructing D"<<endl; }A a; }; void main(){D d(1,2); } 運行結果: Constructing A 4 Constructing B Constructing B1 1 Constructing B Constructing B2 2 Constructing A 3 Constructing D #include <iostream> using namespace std; class Base{ protected:int n; public:Base(int m){n=m++;}virtual void g1(){cout<<"Base::g1()..."<<n<<endl;g4();}virtual void g2(){cout<<"Base::g2()..."<<++n<<endl;g3();}virtual void g3(){cout<<"Base::g3()..."<<++n<<endl;g4();}virtual void g4(){cout<<"Base::g4()..."<<++n<<endl;} }; class Derive: public Base{int j; public:Derive (int n1,int n2):Base(n1){j=n2;}void g1(){cout<<"Deri::g1()..."<<++n<<endl;g2();}void g3(){cout<<"Deri::g2()..."<<++n<<endl;g4();} }; void main(){Derive Dobj(1,0);Base Bobj=Dobj;Bobj.g1();Base &bobj2=Dobj;bobj2.g1(); } 運行結果: Base::g1()...1 Base::g4()...2 Deri::g1()...2 Base::g2()...3 Deri::g2()...4 Base::g4()...5 #include <iostream.h> class A {public:A(int anInt = 0 ):i(anInt){cout << "A::A( )" << endl;}A(const A& anA){cout << “A::A(const A&)” << endl;i = anA.i;}int getI( ) const{return i;}~A( ){cout << "A::~A( )" << endl;}private:int i; }; class B {public:B( ){cout << "B::B( )" << endl;}B(const A& anA): a(anA){cout << "B::B(constA&) " << endl;}virtual void f( ){cout << "B::f( )" << endl;cout << a.getI( ) << endl;}virtual ~B( ){cout <<"B::~B( )"<<endl;}private:A a; }; class D : public B {public:D( ){cout << "D::D( )" << endl;}D(const A& anA): a(anA){cout << "D::D(constA&)" << endl;}void f( ){B::f( );cout << "D::f( )" << endl;cout << a.getI( ) << endl;}~D( ){cout << "D::~D( )" << endl;}private:A a; }; void main( ) {A a(10);B* pB = new D(a);pB->f( );delete pB; } 運行結果: A::A( ) A::A( ) B::B( ) A::A(const A&) D::D(constA&) B::f( ) 0 D::f( ) 10 D::~D( ) A::~A( ) B::~B( ) A::~A( ) A::~A( )對于析構函數:
最先構造的最晚被釋放
派生類構造函數的執行順序:
第一步執行:虛擬基類的構造函數(多個虛擬基類則按照繼承的順序執行構造函數)。
第二步執行:基類的構造函數(多個普通基類也按照繼承的順序執行構造函數)。
第三步執行:類類型的成員對象的構造函數(按照初始化順序)。
第四部執行:派生類自己的構造函數。
四、程序填空題
當調用語句為cout<<Divide(2,0)<<endl;時,輸出結果為:除數不能為0!
當調用語句為cout<<Divide(1,1000)<<endl;時,輸出結果為:除數太大!
當調用語句為cout<<Divide(1,2)<<endl;時,輸出結果為:0.5
五、程序設計題
(10分)定義一個大學生類student,函數私有數據成員:姓名、學號、校名,并為它定義帶參數的構造函數、參數帶缺省值的構造函數和輸出數據成員值的print()公有成員函數,另定義研究生類,它以公有繼承方式派生于類student,新增加“研究方向、導師名”兩個私有數據成員,并定義帶參數的構造函數和輸出研究生數據的print()公有成員函數。在main()函數中定義基類和派生類對象,對類進行測試。
主函數的測試程序如下:
程序運行輸出結果如下:
name=Li StuNum=1600141 universty_name=XJUname=Wang StuNum=1600240 universty_name=XJU special is Compute director is Zhang定義一個圓類,數據成員有顏色、圓心坐標、半徑;成員函數有構造函數(有四個參數),設置圓的各種參數,顯示圓的各種參數,計算圓的面積和周長,并編寫一個主函數對所定義的圓類進行測試。(12分)
定義一個點類(Point)、矩形類(Rectangle)和立方體類(Cube)的層次結構。Point為基類,成員有點的x坐標和y坐標;Rectangle包括長度和寬度兩個新數據成員,Rectangle的位置從Point類繼承。Cube類的數據成員包括長度、寬度和高度,長度和寬度從Rectangle類繼承。要求各類提供支持初始化的構造函數和顯示自己成員的成員函數。編寫主函數,測試這個層次結構,輸出立方體類的相關信息。(12分)
(共20分,每問題10分) 某程序員為了靈活地對各種的給定的曲線函數f(x)畫出其曲線圖形,設計并部分實現了一個曲線類curve,該類的成員數據中,count代表坐標點的個數,pxs代表的數組存放這些坐標點的橫坐標,pys代表的數組存放利用f(x)計算得到的這些坐標點的縱坐標。由于不同曲線的計算公式f(x)是不同的,該程序員希望曲線函數的種類可以通過繼承curve類的方式任意增加,增加一個新的f(x)時不改變curve類中的內容,也不改變利用curve類進行圖形繪制的算法。已部分完成的curve類定義和實現如下:
請按照該程序員的設計意圖給出成員函數getPys的完整實現。實現過程中,可以為curve類增加其它成員??梢约僭OsetPxs函數已經完整實現,不需要考慮曲線的繪制和顯示。
(共10分)定義一個抽象類Stereo,包含純虛函數Volume(用來計算體積)。然后派生出立方體Cube類、圓球體Sphere類、圓柱體Cylinder類,分別求其體積。各立體形狀的相關數據通過各類的構造函數設置。total( )則是一個通用的用以求不同立體形狀的體積總和的全局函數。(圓球體的體積公式為 V=4/3PIRRR)。
1)請根據下面主函數代碼,給出各個類的定義和實現。
2)請根據下面主函數代碼,給出total( )函數的定義和實現。
總結
以上是生活随笔為你收集整理的2018-2019 C++期末复习资料的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7安装nexus3
- 下一篇: nexus3的目录介绍