趨勢科技的筆試


1、#include stdio.h

class a{

public:

a(){func(0);};

virtual void func(int data){printf(a1:%d,data);}

virtual void func(int data) const{printf(a2:%d,data);}

void func(char *str){printf(a3:(%s),str);}

};

class b:public a{

public:

void func(){printf(b1:%s,);}

void func(int data){printf(b2:%d,data);}

void func(char *str){printf(b3:(%s),str);}

};

int main()

{

a *pa;

b b;

const a *pca;

pa=b;

pa-func(1);

pa-func(test);

a().func(1);

pca=b;

pca-func(2);

return 0;

}

程式運行的結果:

a1:0

b2:1

a3:(test)

a1:0

a1:1

a2:2

1)

基類的指針指向派生類對象:那么該指針只能夠調用基類所定義的函式,但是如果該函式為虛函式,則調用該派生類自己的成員函式。(b2:1)

2)

如果以派生類的指針指向基類對象,則必須事先做明顯的轉型操作,但是這種做法很危險。

2、

include iostream.h

template typename t

void func(const int t)

{

coutt 100endl;

}

templatetypename t

void func(const tt)

{

couttendl;

}

int main()

{

func(10.3);

func(1000);

return 0;

}

程式運行結果:

10.3

1000

如果上述函式改為

include iostream.h

void func(const int t)

{

coutt 100endl;

}

templatetypename t

void func(const tt)

{

couttendl;

}

int main()

{

func(10.3);

func(1000);

return 0;

}

則程式的運行結果為:

10.3

1100

如果使用函式的非模板形式,不能在前面加上template關鍵字。

3、

改錯:

include iostream.h

class klass

{

public:

klass(){}

private:

~klass(){}

void func(int n){

coutklass!!endl;

} public:

void test(){

func(100);

}

};

int main()

{

klass k;

k.test();

return 0;

}

運行後程式顯示:error c2248: 'klass::~klass': cannot access private member declared in class 'klass'

證明析構函式的屬性必須為public。

但是,如果把klass k改為klass* pk; pk=new klass; pk-test();程式通過,但是klass不能釋放