點擊查看:2016年計算機二級《C++》基礎練習題及答案匯總
1[單選題]下列關于面向對象概念的描述中,錯誤的是( )。
A.面向對象方法比面向過程方法更加先進
B.面向對象方法中使用了一些面向過程方法中沒有的概念
C.面向對象方法替代了結構化程序設計方法
D.面向對象程序設計方法要使用面向對象的程序設計語言
參考答案:C
2[簡答題] 有以下兩個程序,分析它們的執行結果有什么不同。
程序1:
#include
class Point
{
int x,y;
public:
Point(){x=y=0;}
Point(int i,int j){x=i;y=j;}
Point operator+(Point);
void disp() ( cout<<”(”<
}
Point Point::operator+(Point P)
{
this->x+=P.x; this->y+=p.y;
return *this;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
p3=pl+p2;
cout<<”執行p3=p1+p2后”<
cout<<”p1:”,p1.disp();
cout<<”p2:”;p2.disp();
cout<<”p3:”;p3.disp();
}
程序2:
#include
class Point{
int x,Y;
public:
Point(){x=y=O;}
Point(int i,int j){x=i,y=j;}
Point operator+(Point);
void disp f){cout<< ”(”<
}
Point Point::operator+(Point P)
{
Point s;
s.x=x+p.x; s.y=y+p.y;
return s;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
p3=pl+p2;
cout<<”執行p3=p1+p2后”<
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
cout<<”p3:”;p3.disp();
}
參考解析:這兩個程序中的main函數完全相同,類Point中的運算符重載均采用成員函數方式實現,只是程序1的運算符重載函數使用this指針,而程序2的運算符重載函數使用局部對象。
p3=p1+p2 等價于p3=p1.operator+(p2)。對于程序1,this指針指向p1對象,執行this->x+=p.x;this->y十一 p.y;語句,修改p l對象的x和y成員值,執行return*this;語句,將pl對象賦給p3。所以p1和p3兩個對象的x、Y值相同,即p3=pl+p2等價于 p1=p1+p2,p3:p1,其運行結果如下:
p1:(2,3)
p2:(3,4)
執行p3=pl+p2后
P1:(5,7)
p2:(3,4)
P3:(5,7)
對于程序2,執行運算符重載函數,Point s;語句定義一個對象,s.x=x+p.x;s.y=y+p.y;語句用于修改s對象的x、Y值,ret%il~l s;語句返回該對象,賦給p3,而p1和p2對象不改變。其運行結果如下:
p1:(2,3)
p2:(3,4)
執行p3=pl+p2后
p1:(2,3)
p2:(3,4)
p3:(5,7)第
3[單選題]C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的變化是
A.增加了一些新的運算符
B.允許函數重載,并允許設置缺省參數
C.規定函數說明符必須用原型
D.引進了類和對象的概念
參考答案:D
4[單選題] 若x和y是程序中的兩個整型變量,則下列if語句中正確的是( )。
A.if(x==O)y=1;elsey=2;
B.if(x==0)theny=1elsey=2
C.if(x==O)y=1elsey=2;
D.ifx==0y=1elsey=2;
參考答案:A
參考解析:if…else語句的格式“if(<條件>)<語句1>else<語句2>”注意語句結束要以分號結尾,對照題中選項可知A正確。
5[單選題]
A.3B.4C.5D.6
參考答案:C
參考解析:
6[單選題]友元函數的作用是( )。
A.提高程序的效率
B.加強類的封裝性
C.實現數據的隱蔽性
D.增加成員函數的種類
參考答案:A
參考解析:友元函數的引入是為了提高程序的效率,減少通過接口訪問的限制,但卻破壞了類的封裝性。
7[單選題]下列描述中,錯誤的是( )。
A.公有繼承時基類中的公有成員在派生類中仍是公有成員
B.公有繼承時基類中的保護成員在派生類中仍是保護成員
C.保護繼承時基類中的公有成員在派生類中仍是公有成員
D.保護繼承時基類中的保護成員在派生類中仍是保護成員
參考答案:C
參考解析:保護繼承時基類中的公有成員在派生類中是保護成員。
8[單選題] 下列關于C++函數的說明中,正確的是( )。
A.內聯函數就是定義在另一個函數體內部的函數
B.函數體的最后一條語句必須是return語句
C.標準C++要求在調用一個函數之前,必須先聲明其原型
D.編譯器會根據函數的返回值數型和參數表來區分函數的不同重載形式
參考答案:C
參考解析:內聯函數不是定義在另一個函數體內部的函數,而是將inline放在函數定義中函數類型之前;函數體的最后一條語句可以是任意的語句;編譯器不會根據函數返回值的類型來區分重載形式,選項D錯誤。標準C++要求在調用一個函數之前,必須先聲明其原型。
9[簡答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,即使程序在屏幕輸出以下類似內容:
0012FF6810012FF3C5
0012FF6C20012FF444
0012FF7030012FF4C3
0023FF7440012FF542
0012FF7850012FF5C1
006AFDCC~006AFDEF數據可能因為機器的不同,程序輸出的內容會有差異。只要相差為4的連續地址即可。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。
試題程序:
#include
usingnamespacestd;
intmain()
{
int*P,a[5]={1,2,3,4,5};
double*q,b[5]={5.0,4.0,3.0,2.0,1.0);
intx;
P=a;
q=b;
//********error********
for(x=0;x<=5;X++)
//********error********
cout<
(q+x)<
return0;
}
參考解析:
(1)應改為“for(x=0;x<5;x++)”。
(2)應改為“cout<
【解析】本題中根據數組a、b的定義。它們都有5個元素,而第1處的“for(x=0;x<=5;x++)”循環了6次,應該是5次,所以在第1處將其修改為“for(x=0;x<5;x++)”;第2處的P變量為指針型變量,p+x為糯向數組中第X個元素的地址,這里要輸出的是存儲單元的內容,所以使用“*”指針元素符,即修改為“cout<
10[填空題]類中包含了一個靜態成員函數,則main函數中和P.f1(P);語句具有同樣功能的語句為_______。
參考解析:
【答案】M::f1(P);
【解析】由于f1是類M的靜態成員函數,即說明類M的任何對象都共享一份f1,因此,不僅可以從對象那里訪問f1,還可以用域操作符::通過類名來訪問。
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |