自考C++程序结果及答案

阅读: 评论:0

2024年2月7日发(作者:)

自考C++程序结果及答案

1. 给出下面程序输出结果。

#include

class a

{public:

virtual void print()

{cout<< ""<< endl;};};

class b:public a

{};

class c:public b

{public:

void print(){cout<<"c

"<

void show(a *p)

{(*p).print();}

void main()

{a a;

b b;

c c;

show(&a);

show(&b);

show(&c);}

答案:

[解析]考查多态性的。a类对象调用本身的虚函数,b类因为没有覆写print,所以仍然调用基

类的虚函数。而c类重新定义print虚函数,所以调用c类的print。

2. 给出下面程序输出结果。

#include

#include

#include

bool fun(long n);

void main()

{long a=10,b=30,l=0;

if(a%2==0) a++;

for(long m=a;m<=b;m+=2)

if(fun(m))

{if(l++%10==0)

cout <

cout <

}

}

bool fun(long n)

{int sqrtm=(int)sqrt(n);

for(int i=2;i<=sqrtm;i++)

if(n%i==0)

return false;

return true;

}

答案:11 13 17 19 23 29

[解析]循环体用来判断n是否是质数的函数,在main函数判断10~30之间质数。

3. 给出下面程序输出结果。

#include

class Test

{int x,y;

public:

Test(int i,int j=0)

{x=i;y=j;}

int get(int i,int j)

{return i+j;}

};

void main()

{Test t1(2),t2(4,6);

int (Test::*p)(int,int=10);

p=Test::get;

cout<<(t1.*p)(5)<

Test *p1=&t2;

cout<<(p1->*p)(7,20)<

}

答案:15 27

[解析]指向类成员函数的指针的使用,*p指向Test类中有两个参数的函数的一个指针。

P=Test::get.这样p就和get发生了联系。(t1.*p)(5)等价于调用一个参数的get函数。

4. #include

#include

#include

class student

{char name[8];

int deg;

char level[7];

friend class process; // 说明友元类

public:

student(char na[],int d)

{ strcpy(name,na);

deg=d;

}

};

class process

{ public:

void trans(student &s)

{int i=/10;

switch(i)

{case 9:

strcpy(, "优");break;

case 8:

strcpy(,"良");break;

case 7:

strcpy(,"中");break;

case 6:

strcpy(,"及格");break;

default:

strcpy(,"不及格");

}

}

void show(student &s)

{cout<

};

void main()

{ student st[]={student("张三",78),student("李四",92),student("王五

",62),student("孙六",88)};

process p;

cout<<"结 果:"<<"姓名"<

for(int i=0;i<4;i++)

{ (st[i]);

(st[i]);}

}

答案:结果:姓名成绩等级

张三78中

李四92优

王五62及格

孙六88良

1. 给出下面程序输出结果。

#include

class example

{int a;

public:

example(int b=5){a=b++;}

void print(){a=a+1;cout <

void print()const

{cout<

};

void main()

{example x;

const example y(2);

();

();

}

答案:62

[解析]x是普通对象,调用普通的print函数;而y常对象,调用常成员函数。

2. 给出下面程序输出结果。

#include

void main()

{ int *p1;

int **p2=&p1;

int b=20;

p1=&b;

cout<<**p2<

}

答案:20

[解析]p1指向b,而p指向p1的地址。*p2表示p1的地址,p1的地址就是&b,即*p2是&b,所以

**p2就是b变量的值。

3. 给出下面程序输出结果。

#include

class Base

{private:

int Y;

public:

Base(int y=0) {Y=y;cout<<"Base("<

~Base() {cout<<"~Base()\n";}

void print() {cout <

};

class Derived:public Base

{private:

int Z;

public:

Derived (int y, int z):Base(y)

{Z=z;

cout<<"Derived("<

}

~Derived() {cout<<"~Derived()\n";}

void print()

{Base::print();

cout<

}

};

void main()

{Derived d(10,20);

();

}

答案:Base(10)

Derived(10,20)

10 20

~Derived()

~Base()

[解析]派生类对象,先调用基类构造函数输出Base(10),后调用派生类构造函数输出Derived(10,20),后执行(),调用派生类的print,再调用Base::print()输出10,后返回

输出z的值20。后派生类析构,再基类析构。4. 给出下面程序输出结果。

#include

class A

{public:

A()

{cout<<"A 构造函数\n";fun();}

virtual void fun()

{cout<<"A::fun() 函数\n";}

};

class B:public A

{public:

B()

{cout<<"B构造函数\n";fun();}

void fun() {cout<<"B::fun() calle函数\n";}

};

void main()

{B d;}

答案:A构造函数

A::fun()函数

B构造函数

B::fun()calle函数

[解析]定义派生类对象,首先调用基类构造函数,调用A类中fun(),然后调用B类的构造函数

,在调用B的fun函数。

1. 运行程序,写出程序执行的结果。

#include

void main()

{int a,b,c;

char ch;

cin>>a>>ch>>b>>c;//从键盘上输入1.5×c×10×20,×表示一个空格

cout<

}

答案:1

.

5

0

[解析]使用cin进行输入字符的输入的问题。1-->a,.-->ch,5-->b,空格转换为零给了c。

2. 给出下面程序输出结果。

#include

class A

{public:

A()

{cout<<"As cons."<

virtual ~A()

{cout<<"As des."<

virtual void f()

{cout<<"As f()."<

void g()

{f();}

};

class B:public A

{public:

B()

{f();cout<<"Bs cons."<

~B()

{cout<<"Bs des."<

};

class C:public B

{public:

C()

{cout<<"Cs cons."<

~C()

{cout<<"Cs des."<

void f()

{cout<<"Cs f()."<

};

void main()

{A *a=new C;

a->g();

delete a;

}

答案:As f().

Bs cons.

Cs cons.

Cs f().

Cs des.

Bs des.

As des.

[解析]定义C类对象时要调用基类构造函数从A到B再到C,调用B的构造函数时,B类没有

f(),则指向来自A类的f()函数。同时用基类的指针指向了派生类对象。最后析构函数的执

行。

1. 给出下面程序输出结果。

#include

class a

{public:

a(int i=10){x=i;cout<<"a:"<

int x;

};

class b:public a

{public:

b(int i):A(i){x=i;cout<<"b:"<

"<

private:

a A;

int x;

};

void main()

{b B(5);

}

答案:a:10

a:5

b:5,10

[解析]定义对象B,先调用基类构造函数,在b构造函数中使用的是A(i),注意大小写,不

是a(i),也就是说调用基类的构造函数时没有实参值,所以采用默认值;在初始化类成员A,即

A(i),i=5,所以输入为a:5;最后是b类的构造函数,x=5,来自基类x=10,输出b:5,10。

2. 运行程序,写出程序执行的结果。

#include

class Location

{public:

int X,Y;

void init(int initX,int initY);

int GetX();

int GetY();

};

void Location::init (int initX,int

initY)

{X=initX;

Y=initY;

}

int Location::GetX()

{return X;

}

int Location::GetY()

{return Y;

}

void display(Location& rL)

{cout<<()<<" "<<()<<\n;

}

void main()

{Location A[5]={{5,5},{3,3},{1,1},{2,2},{4,4}};

Location *rA=A;

A[3].init(7,3);

rA->init(7,8);

for (int i=0;i<5;i++)

display(*(rA++));

}

答案:7 8

3 3

1 1

7 3

4 4

[解析]对象数组的使用。使用数组对象修改了A[3]元素的值,又使用指针修改指针所指向的

第一个元素的值,因此修改了A[0]和A[3]元素的值。

3. 给出下面程序输出结果。

#include

int a[8]={1,2,3,4,5,6,7};

void fun(int *pa,int n);

void main()

{int m=8;

fun(a,m);

cout<

}

void fun(int *pa,int n)

{for (int i=0;i

*(pa+7)+=*(pa+i);

}

答案:28

[解析]数组名与指针都表示地址,只是数组名是常地址,不能改变;指针是地址变量,使用时

可以当数组名使用。

4. 给出下面程序输出结果。

#include

class A

{int *a;

public:

A(int x=0):a(new int(x)){}

~A() {delete a;}

int getA() {return *a;}

void setA(int x) {*a=x;}

};

void main()

{A x1,x2(3);

A *p=&x2;

(*p).setA(()+5);

(10+());

cout<<()<<""<<()<

}

答案:108

[解析]p指向对象x2,()+5该值为8 即x2.a=8;10+()为10,x1.a=10。

1. 给出下面程序输出结果。

#include

class Base

{private:

int Y;

public:

Base(int y=0) {Y=y;cout<<"Base("<

~Base() {cout<<"~Base()\n";}

void print() {cout <

};

class Derived:public Base

{private:

int Z;

public:

Derived (int y, int z):Base(y)

{Z=z;

cout<<"Derived("<

}

~Derived() {cout<<"~Derived()\n";}

void print()

{Base::print();

cout<

}

};

void main()

{Derived d(10,20);

();

}

答案:Base(10)

Derived(10,20)

10 20

~Derived()

~Base()

[解析]派生类对象,先调用基类构造函数输出Base(10),后调用派生类构造函数输出

Derived(10,20),后执行(),调用派生类的print,再调用Base::print()输出10,后返回

输出z的值20。后派生类析构,再基类析构。

2. 给出下面程序输出结果。

#include

class test

{int x;

public:

test(int i=0):x(i){}

virtual void fun1()

{cout << "test::x"<

};

class ft:public test

{int y;

public:

void fun1(){cout <<"ft::y="<

ft(int i=2):test(i),y(i){}

};

void main()

{ ft ft1(3);

void (test::*p)();

p=test::fun1;

(ft1.*p)();

}

答案:ft::y=3

[解析]指向函数的指针的使用,p指向fun1函数,(ft1.*p)实际就是调用ft1对象的

fun1()函数。

1. 给出下面程序输出结果。

#include

class example

{int a;

public:

example(int b=5){a=b++;}

void print(){a=a+1;cout <

void print()const

{cout<

};

void main()

{example x;

const example y(2);

();

();

}

答案:62

[解析]x是普通对象,调用普通的print函数;而y常对象,调用常成员函数。

2. 给出下面程序输出结果。

#include

class A

{public:

A()

{cout<<"A 构造函数\n";fun();}

virtual void fun()

{cout<<"A::fun() 函数\n";}

};

class B:public A

{public:

B()

{cout<<"B构造函数\n";fun();}

void fun() {cout<<"B::fun() calle函数\n";}

};

void main()

{B d;}

答案:A构造函数

A::fun()函数

B构造函数

B::fun()calle函数

[解析]定义派生类对象,首先调用基类构造函数,调用A类中fun(),然后调用B类的构造函数

,在调用B的fun函数。

自考C++程序结果及答案

本文发布于:2024-02-07 18:14:57,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170730089765608.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调用   对象   结果   程序
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23