1.描述面向對象技術的基本概念
面向對象是人們認識客觀世界的系統思維方式,采用基于對象(實體)的概念建立模型,模拟客觀世界分析,設計,實作軟體的方法,包括類,對象,消息以及類的特性等方面的内容。
2.C++與C語言相比的改進
C++是從C語言發展演變的。C語言是過程式程式設計語言,它以過程為中心,以算法為驅動。而C++能夠使用面向對象的程式設計方式,即使用以面向對象為中心,以消息為驅動的程式設計方式。這是C++在C語言上面的最大改進。
3.class和struct有什麼差別
分為以下兩種情況:
C語言的struct與C++的class的差別:struct隻是作為一種複雜資料類型定義,不能用于面向對象程式設計;
C++中的struct與class的差別:對于成員通路權限以及繼承方式,class中預設的是private的,而struct中則是public的。class還可以用于表示模闆類型,struct則不行。
4.改錯——C++類對象的聲明
struct Test
{
Test(int){}
Test(){}
void fun(){}
};
void main(void)
{
Test a();
a.fun();
Test b();
b.fun();
}
題中的Test有兩個構造函數,其中一個是帶參數的,而另一個是不帶參數的。在調用不帶參數的構造函數時不需要加小括号,是以代碼第12行是錯誤的。應該改成:
Test b;//去掉小括号
5.看代碼寫結果——C++類成員的通路
(類對象的私有成員函數不能用對象通路)
#define public private //(1)
class Animal
{
public : //(2)
void MakeNoise();
};
int main(void)
{
Animal animal;
animal.MAkeNoise();//(3)
return ;
}
(1)正确。把public宏定義為private;
(2)正确。定義public成員。注意,由于public已經被定義為private,是以這裡的MakeNoise()成員函數實際上是private。
(3)錯誤。調用Animal對象的私有成員函數。
6.找錯——類成員的初始化
#include<iostream>
using namespace std;
class Obj{
public :
Obj(int k):j(k),i(j);
{
}
void printf(void)
{
cout<<i<<endl<<j<<endl;
}
private:
int i;
int j;
};
int main(int argc,char *argv[])
{
Obj obj();
obj.print();
return ;
}
本題考查的是初始化清單方面的知識。這裡很容易讓人以為先用2對j進行初始化,然後用j對i進行初始化,那麼i和j都是2.
實際上,初始化的順序正好與想象的相反。初始化清單的初始化順序與變量聲明的順序一緻,而不是按照出現在初始化清單中的順序。這裡的成員i比成員j先聲明,是以正确的順序是先用j對i進行初始化,然後用2對j進行初始化。由于在對i進行初始化時j尚未被初始化,j的值為随機值,故i的值也為随機值;然後用2對j進行初始化,j的值為2.
7.靜态成員變量的使用(看代碼,寫結果)
#include<iostream>
using namespace std;
class Myclass
{
public :
Myclass(int a,int b,int c);
void GetNumber();
void GetSum();
private:
int A;
int B;
int C;
int Num;
static int Sum;
};
int Myclass::Sum=;
Myclass::Myclass(int a,int b,int c)
{
A=a;
B=b;
C=c;
Num=A+B+C;
Sum=A+B+C;
}
void Myclass::GetNumber()
{
cout<<"Number="<<Num<<endl;
}
void Myclass::GetSum()
{
cout<<"Sum="<<Sum<<endl;
}
void main()
{
Myclass M(,,),N(,,);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
本題考查的是靜态成員與非靜态成員的差別。靜态成員被當作該類類型的全局變量。對于非靜态成員,每個類對象都有自己的複制品,而靜态成員對每個類的類型隻有一個複制品。靜态成員隻有一份,由該類類型的所有對象共享通路。
MyClass類中有GetNumber()和GetSum()兩種方法,它們分别輸出成員變量Num和Sum的值。main函數中定義了兩個Myclass的對象,并調用它們的GetNumber()和GetSum()方法。
Num成員為普通類型,它為Myclass類的對象所有。因為兩次列印的值不一樣。
Sum成員為靜态類型,它為Myclass類所有,被Myclass類的所有對象共享。是以,兩次列印出來的值是相同的。
答案如下:
Number=20
Number=34
Sum=34
Sum=34
8.與全局對象相比,使用靜态資料成員有什麼優勢
優勢如下:*1.靜态資料成員沒有進入程式的全局名字空間,是以不存在程式中其他全局名字沖突的可能性;
*2.使用靜态資料成員可以隐藏資訊。是以靜态成員可以是private成員,而全局對象不能。