一.选择题
1、下列不能作为类的成员的是(B)
A. 自身类对象的指针
B. 自身类对象
C. 自身类对象的引用
D. 另一个类的对象
2、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(B)
A. x.a
B. x.a()
C. x->a
D. (*x).a()
3、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确的是(C)
A. A1.p=5;
B. A1->p=5;
C. A1.*p=5;
D. *A1.p=5;
4、下列不具有访问权限属性的是(A)
A. 非类成员
B. 类成员
C. 数据成员
D. 函数成员
5、 下面的叙述中那个是不正确的是__C_
A 类必须提供至少一个构造函数
B 默认构造函数的形参列表中没有形参
C 如果一个类没有有意义的默认值,则该类不应该提供默认构造函数
D 如果一个类没有定义默认构造函数,则编译器会自动生成一个,同时将每个数据成员初始化为相关类型的默认值
二.填空题
1、给出下面程序输出结果。
#include <iostream>
using namespace std;
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;}
};
int main()
{ Test t1(2),t2(4,6);
int (Test::*p)(int,int);
p=&Test::get;
cout<<(t1.*p)(5,10)<<endl;
Test *p1=&t2;
cout<<(p1->*p)(7,20)<<endl;
}
答:15和27
2、下面程序运行的结果是:。
#include <iostream.h>
class Test
{ private:
int x,y;
public:
Test() {x=y=0;}
void Setxy(int x,int y) {______}
void show(){______}
};
int main()
{ Test ptr;
ptr.Setxy(5,10);
ptr.show();
}
答:5+10=15
3、请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
11, 10
13, 12
#include <iostream.h>
class A
{int a;
public:
A(int i=0){a=i;}
int Geta(){return a;}
void show(){cout<<a<<endl;}
};
class B
{
A a;
int b;
public:
B(int i,int j):b(i),a(j)__
{ }
void show(){cout<<a.Geta()<<","<<b<<endl;}
};
void main()
{ B b[2]={B(10,11),B(12,13)};
for(int i=0;i<2;i++)
b[i].show;______
}
三、改错题
1. #include <iostream.h>
class Test
{ private:
int x,y=20;
public:
Test(int i,int j){ x=i,y=j; }
int getx(){return x;}
int gety(){return y;}
};
void main()
{ Test mt(10,20);
cout<<mt.getx()<<endl;
cout<<mt.gety()<<endl;
}
答:void main()--->int main(int x,int y)
2. #include <iostream.h>
class Test
{int x,y;
public:
void fun(int i,int j)
{x=i;y=j;}
void show()
{
cout<<"x="<<x;
if(y)
cout<<",y="<<y<<endl;
cout<<endl;
}
};
int main()
{ Test a;
a.fun( )
a.fun(1);
a.show();
a.fun(2,4);
a.show();
}
答:函数a.fun()和a.fun(1)找不到重载对象,形参需要初始化赋值
3 . #include <iostream.h>
class X
{ public:
int x;
public:
X(int x)
{cout<< this->x=x <<endl;}
X(X&t)
{x=t.x;
cout<<t.x<<endl;
}
void fun(X);
};
void fun(X t)
{ cout<<t.x<<endl;}
void main()
{ fun(X(10));}
答:
X(int x)
{cout<< this->x=x <<endl;}构造函数未进行赋值初始化
{fun(X(10));}找不到构造对象
4 . #include <iostream.h>
#include <string.h>
class Bas
{ public:
Bas(char *s="\0"){strcpy(name,s);}
void show();
protected:
char name[20];
};
Bas b;
void show()
{ cout<<"name:"<<b.name<<endl; }
void main()
{
Bas d2("hello");
show();
}
答:{ cout<<"name:"<<b.name<<endl; }中b.name是protected对象,受保护
四、编程题
4.1 a: 编写一个类Person,表示一个人的名字和地址,使用string来保存每个元素
b:为Person提供一个接受两个string参数的构造函数
c:提供返回名字和地址的操作
d:指明Person的那个成员应声明为public,那个成员应声明为private