一、填空題
(1) 類定義中關鍵字private.public和protected以後的成員的訪問權限分別是(私有)(共有)和(保護)。如果沒有使用關鍵字,則所有成員默認定義爲(private)權限。具有(public)訪問權限的數據成員才能被不屬於該類的函數所直接訪問。
(2)定義成員函數時,運算符“::”是(作用域)運算符,“MyClass::"用於表明其後的成員函數是在“(MyClass類)”中說明的。
(3)在程序運行時,通過爲對象分配內存來創建對象。在創建對象時,使用類作爲(樣板),故稱對象爲類的(實例)。
(4)假定Dc是一個類,則執行“Dc a[10],b[2]”語句時、系統自動調用該類構造函數的次數爲(11)。
(6)(delete)運算行通常用於實現釋放該類對象中指針成員所指向的動態存儲空間的任務。
(7)C++程序的內存格局通常分爲4個區(數據區)(代碼區)(棧區)和(堆區)。
(8) 數據定義爲全局變量,破壞了數據的(封裝性),較好的解決辦法是將所要共享的數據定義爲類的(靜態成員)。
(9)靜態數據成員和靜態成員函教可由( 任意訪問權限許可的 )函數訪問。
(10)(友元函數)和(友元類)統稱爲友元。
(11)友元的正確使用能提高程序的(效率),但破壞了類的封裝性和數據的隱蔽性。
一、選擇題(至少選一個,,可以多選)
(1)以下不屬於類存取權限的是(B)
A.public
(2) 有關類的說法不正確的是(BC )。
A.類是一種用戶自定義的數據類型
B.只有類的成員函數才能訪向類的私有數據成員
C.在類中,如不做權限說明,所有的數據成員都是公有的
D.在類中,如不做權限說明,所有的數據成員都是私有的
(3) 在類定義的外部,可以被任意麗數訪問的成員有(C)
A.所有類成員
B.private 或protected 的類成員
C.public 的類成員
D.public 或private 的類成員
(4)關於類和對象的說法(C )是錯誤的。
A 對象是類的一個實例
B,任何一個對象只能屬於一個具體的類
C,一個類只能有一個對象
D. 類與對象的關係和數據類型與變量的關係相似
(5) 設M Class 是一個類,dd是它的一個對象,PP是指向dd的指針,cc是dd的引用,則對成員的訪問,對象dd 可以通過( B )進行,指針PP 可以通過( D )進行,引用cc 可以通過( B )進行。
(6) 關於成員函數的說法中不正確的是( C)
A.成員函數可以無返回值
B.成員函數可以重載
C.成員函數一定是內聯函數
D.成員函數可以設定參數的默認值
(7) 下面對構造函數的不正確描述是(B )
A.系統可以提供默認的構造
B.構造函數可以有參數
C.構造函數可以重載
D.構造函數可以設置默認參數
(8) 假定A 是一個類,那麼執行語句“Aa ,b(3).*p;”調用了(B)次構造函數。
A.1
(9) 下面對析構函數的正確描述是 ( AC )
A 系統可以提供默認的析構函數
B. 析構函數必須由用戶定義
C. 析構函數沒有參數
D. 析構函數可以設置默認參數
10)類的析構函數是(D)時被調用的。
A. 類創創建
(11)建一個類的對象時,系統自動調用(B),撤銷對象時,系統自動調用(C)
A. 成員函數
(12) 通常拷貝構遺函數的參數是(C)
A.某個對象名
B. 某個對象的成員名
C.某個對象的引用名
(13) 關於this指針的說法正確的是(B)。
A.this 指針必須顯式說明
B.當創建一個對象後this指針就指向該對象
C.成員函數擁有this指針
D.靜態成員函數擁有this指針
(14) 下列關於子對象的描述中,(B)是錯誤的。
A.子對象是類的一種數據成員,它是另一個類的對象
B.子對象可以是自身類的對象
C.對子對象的初始化要包含在該類的構造函數中
D.一個類中能含有多個子對象作其成員
(15)對new運算符的下列描述中,(B)是錯誤的。
A.它可以動態創建對象和對象數組
B.用它創建對象數組時必須指定初始值
C.用它創建對象時要調用構造函數
D.用它創建的對象數組可以使用運算符delete 來一次釋放
(16) 對delete運算符的下列描述中,( D )是錯誤的。
A.用它可以釋放用new運算符創建的對象和對象數組
B.用它即第一個對象時,它作用於一個new所返回的指針
C.用它釋放一個對象教組時,它作用的指針名前須加下標運算符[]
D.用他可一次釋放用new運算符創建的多個對象
17)關於靜態數據成員,下面敘述不正確的是(C)
A 使用靜態數據成員,實際是爲了消除全局變量
B.可以使用“對象名,靜態成員”或者“類名::靜態成員”來訪問靜態數據成員
C.靜態數據成員只能在靜態成員函數中引用
D.所有對象的靜態數據成員佔用同一內存單元
(18) 對靜態數據成員的不正確描述是( CD)。
A.靜態成員不屬於對象,是類的共享成員
B.靜態數據成員要在類外定義和初始化
C.調用靜態成員函數時要通過類或對象激活,所以靜態成員函數擁this指針
D.只有靜態成員函數可以操作靜態數據成員
(19) 下面的選項中,靜態成員函數不能直接訪問的是( D )。
A.靜態數據成員
(20) 在類的定義中,引人友元的原因是(A )。
A.提高效率
(21)友元類的聲明方法有(A)
A.friend class<類名>
(22) 下面對友元的錯誤描述是( D )
A.關鍵字friend 用於聲明友元
B.一個類中的成員函教可以是另一個類的友元
C.友元函數訪問對象的成員不受訪同特性影響
D.友元函數通過this 指針訪問對象成員
(23)下面選項中,(C)不是類的成員函數,
A.構造函數
B.析構函數
C.友元函數
D.拷貝構造函數
三、簡答題
(1) 類與對象有什麼關係?
class 類名
public:
< 公有數據和函數>
protecled:
<保護數據和函數>
priva.e:
訪問權限共有3種: 分別是公有(public)、保護(protected)和私有(private)。
(3) 類的實例化是指創建類的對象還是定義類?
*當函數的返回值是類的對象,函數執行完成返可調用者時。
(1)
#include<iostream>
using namespace std;
class Test
{
private:
int num;
public:
Test ();
Test (int n);
};
Test ::Test()
{
cout<<"Init defa"<<endl;
num=0;
}
Test::Test(int n)
{
cout<<"Init"<<" "<<n<<endl;
num=n;
}
int main ()
{
Test x[2];
Test y(15);
return 0;
}
(2)
#include <iostream>
using namespace std;
class Xx
{
private:
int num;
public:
Xx(int x){num =x;}
~Xx(){cout<<"dst"<<num<<endl;}
};
int main ()
{
Xx w(5);
cout<<"Exit main"<<endl;
return 0;
}
class Whole
{
public :
Whole(int i);
Whole(){};
~Whole();
private:
Part pl;// 子對象1
Part p2;//1子對象2
Part p3;//子對象3
};
Whole::Whole(int i):p2(i),pl()
{
cout<<"Constructor of Whole"<<endl;
}
Whole::~Whole()
{
cout<<"Destructor of Whole"<<endl;
}
#include<iostream>
using namespace std;
class Part
{
public:
Part();
Part(int x);
~ Part();
private:
int val;
};
Part::Part()
{
val=0;
cout<<"Default constructor of Part"<<endl ;
};
Part::Part(int x)
{
val=x;
cout<<"Constructor of Part"<<","<<val<<endl;
}
Part::~Part()
{
cout<<"Destructor of Part"<<","<<val<<endl;
}
class Whole
{
public :
Whole(int i);
Whole(){};
~Whole();
private:
Part pl;// 子對象1
Part p2;//1子對象2
Part p3;//子對象3
};
Whole::Whole(int i):p2(i),pl()
{
cout<<"Constructor of Whole"<<endl;
}
Whole::~Whole()
{
cout<<"Destructor of Whole"<<endl;
}
int main()
{
Whole w(3);
return 0;
}
#include<iostream>
using namespace std;
class Book
{
public:
Book(int w);
static int sumnum;
private:
int num;
};
Book::Book(int w)
{
num=w;
sumnum-=w;
}
int Book::sumnum=120;
int main ()
{
Book bl(20);
Book b2(70);
cout<<Book::sumnum<<endl;
return 0;
}
輸出結果如下:
(1) 聲明一個Cirele 類,有數據成員radius (半徑)、成員麗數area (),計算圓的面積,構造一個Circle 的對象進行測試。
#include<iostream>
using namespace std;
const float PI=3.14;
class Circle
{
public:
Circle(float r)
{
radius=r;
}
float area()
{
return radius*radius*PI;
}
private:
float radius;
};
int main()
{
Circle c(6);
cout<<"圓的面積="<<c.area()<<endl;
}
(2)重新編寫程序分析題(4)的程序,設計一個靜態成員函數,用來輸出程序分析題(4)中的靜態數據成員的值。
編寫的程序如下:
#include<iostream>
using namespace std;
class Book
{
public:
Book(int w);
static int sumnum;
static int getsum()
{
return sumnum;
}
private:
int num;
};
Book::Book(int w)
{
num=w;
sumnum-=w;
}
int Book::sumnum=120;
int main()
{
Book b1(20);
Book b2(70);
cout<<Book::getsum()<<endl;
return 0;
}