一.选择题
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,正确的是(B)
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、下面程序运行的结果是:5+10=15。
#include <iostream>
class Test
{ private:
int x,y;
public:
Test() {x=y=0;}
void Setxy(int x,int y) {__this->x=x+y;____}
void show(){__cout << this->x << endl;____}
};
int main()
{ Test ptr;
ptr.Setxy(5,10);
ptr.show();
}
3、请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
11, 10
13, 12
#include <iostream>
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;
}
错误点一去掉头文件后的.h
二加上命名空间using namespace std;
三void main 改成int main
2. #include <iostream.h>
class Test
{int x,y;
public:
void fun(int i,int j)
{x=i;y=j;}
void fun(){x=y=0;}
void fun(int i)
{x=i;}
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();
}
错误点一去掉头文件后的.h
二加上命名空间using namespace std;
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));}
错误点一去掉头文件后的.h
二加上命名空间using namespace std;
三X(X&t)改成X(const X&t)
四void main 改成int main
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();
}
错误点一去掉c++头文件后的.h
二加上命名空间using namespace std;
改后代码
#include <iostream>
#include <cstring>
using namespace std;
class Bas {
public:
Bas(const char* s = "\0") {
strcpy(name, s);
}
void show();
protected:
char name[20];
};
Bas b;
void Bas::show() {
cout << "name: " << name << endl;
}
int main() {
Bas d2("hello");
d2.show();
return 0;
}
四、编程题
4.1 a: 编写一个类Person,表示一个人的名字和地址,使用string来保存每个元素
b:为Person提供一个接受两个string参数的构造函数
c:提供返回名字和地址的操作
d:指明Person的那个成员应声明为public,那个成员应声明为private