1. 给出下面程序输出结果。
#include<iostream.h>
class a
{public:
virtual void print()
{cout<< ""<< endl;};};
class b:public a
{};
class c:public b
{public:
void print(){cout<<""<<endl;}};
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 <math.h>
#include <iostream.h>
#include <iomanip.h>
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 <<endl;
cout <<setw(5) <<m;
}
}
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 <iostream.h>
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)<<endl;
Test *p1=&t2;
cout<<(p1->*p)(7,20)<<endl;
}
答案:15 27
[解析]指向类成员函数的指针的使用,*p指向Test类中有两个参数的函数的一个指针。
P=Test::get.这样p就和get发生了联系。(t1.*p)(5)等价于调用一个参数的get函数。
4. #include <iostream.h>
#include <string.h>
#include <iomanip.h>
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=s.deg/10;
switch(i)
{case 9:
strcpy(s.level, "优");break;
case 8:
strcpy(s.level,"良");break;
case 7:
strcpy(s.level,"中");break;
case 6:
strcpy(s.level,"及格");break;
default:
strcpy(s.level,"不及格");
}
}
void show(student &s)
{cout<<setw(10)<<s.name<<setw(4)<<s.deg<<setw(8)<<s.level<<endl;}
};
void main()
{ student st[]={student("张三",78),student("李四",92),student("王五
",62),student("孙六",88)};
process p;
cout<<"结 果:"<<"姓名"<<setw(6)<<"成绩"<<setw(8)<<"等级"<<endl;
for(int i=0;i<4;i++)
{ p.trans(st[i]);
p.show(st[i]);}
}
答案:结果:姓名成绩等级
张三78中
李四92优
王五62及格
孙六88良
1. 给出下面程序输出结果。
#include <iostream.h>
class example
{int a;
public:
example(int b=5){a=b++;}
void print(){a=a+1;cout <<a<<"";}
void print()const
{cout<<a<<endl;}
};
void main()
{example x;
const example y(2);
x.print();
y.print();
}
答案:62
[解析]x是普通对象,调用普通的print函数;而y常对象,调用常成员函数。
2. 给出下面程序输出结果。
#include <iostream.h>
void main()
{ int *p1;
int **p2=&p1;
int b=20;
p1=&b;
cout<<**p2<<endl;
}
答案:20
[解析]p1指向b,而p指向p1的地址。*p2表示p1的地址,p1的地址就是&b,即*p2是&b,所以
**p2就是b变量的值。
3. 给出下面程序输出结果。
#include <iostream.h>
class Base
{private:
int Y;
public:
Base(int y=0) {Y=y;cout<<"Base("<<y<<")\n";}
~Base() {cout<<"~Base()\n";}
void print() {cout <<Y<< "";}
};
class Derived:public Base
{private:
int Z;
public:
Derived (int y, int z):Base(y)
{Z=z;
cout<<"Derived("<<y<<","<<z<<")\n";
}
~Derived() {cout<<"~Derived()\n";}
void print()
{Base::print();
cout<<Z<<endl;
}
};
void main()
{Derived d(10,20);
d.print();
}
答案:Base(10)
Derived(10,20)
10 20
~Derived()
~Base()
[解析]派生类对象,先调用基类构造函数输出Base(10),后调用派生类构造函数输出
Derived(10,20),后执行d.print(),调用派生类的print,再调用Base::print()输出10,后返回
输出z的值20。后派生类析构,再基类析构。
4. 给出下面程序输出结果。
#include <iostream.h>
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 <iostream.h>
void main()
{int a,b,c;
char ch;
cin>>a>>ch>>b>>c;//从键盘上输入1.5×c×10×20,×表示一个空格
cout<<a<<endl<<ch<<endl<<b<<endl<<c<<endl;
}
答案:1
.
5
0
[解析]使用cin进行输入字符的输入的问题。1-->a,.-->ch,5-->b,空格转换为零给了c。
2. 给出下面程序输出结果。
#include <iostream.h>
class A
{public:
A()
{cout<<"As cons."<<endl;}
virtual ~A()
{cout<<"As des."<<endl;}
virtual void f()
{cout<<"As f()."<<endl;}
void g()
{f();}
};
class B:public A
{public:
B()
{f();cout<<"Bs cons."<<endl;}
~B()
{cout<<"Bs des."<<endl;}
};
class C:public B
{public:
C()
{cout<<"Cs cons."<<endl;}
~C()
{cout<<"Cs des."<<endl;}
void f()
{cout<<"Cs f()."<<endl;}
};
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<iostream.h>
class a
{public:
a(int i=10){x=i;cout<<"a:"<<x<<endl;}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论