} };
void main() { A obj1,obj2(100,3.5); obj1.show(\ obj2.show(\ A *p; p=&obj1; p->show(\ (*p).show(\ p=&obj2; p->show(\ (*p).show(\ p=new A; p->show(\ delete p; }
(16)分析下列程序的输出结果。
#include
private: int x,y;
public:
MyCla();
MyCla(int xx);
MyCla(int xx,int yy); MyCla(MyCla &); void Display(); void Set(int, int); ~ MyCla(); };
MyCla:: MyCla() {
cout<<\执行无参构造函数:\ x=0;y=0;
cout<<\}
MyCla:: MyCla(int xx) {
cout<<\执行一个参数构造函数:\ x=xx;y=0;
cout<<\
}
MyCla:: MyCla(int xx,int yy) {
cout<<\执行两个参数构造函数:\ x=xx;y=yy;
cout<<\}
MyCla:: MyCla(MyCla &a) {
cout<<\执行复制构造函数:\ x=a.x;y=a.y;
cout<<\}
void MyCla:: Display() {
cout<<\执行显示函数:\
cout<<\}
void MyCla:: Set(int xx=0,int yy=0) {
cout<<\执行设置函数:\ x=xx;y=yy;
cout<<\}
MyCla::~MyCla () {
cout<<\执行析构函数:\
cout<<\}
① 下列主程序时的运行结果为___________。
void main() { MyCla a;
MyCla b(101); MyCla c(87,98); }
② 下列主程序时的运行结果为___________。
void main() { MyCla a(57,28); a.Set(); a.Set(86); a.Display(); a.Set(24,75);
a.Display(); }
③ 下列主程序时的运行结果为___________。
void main() { MyCla a(33); a.Set(86,543); a.Display(); MyCla b(a); b.Display(); }
④ 下列主程序时的运行结果为___________。
void main() { MyCla a(33); MyCla b(223,54); { MyCla c(38,84);
b.Display();
} a.Display(); }
参考答案:
(1)公有成员,保护成员,私有成员,公有成员,数据成员 (2)构造函数
(3)当对象被撤销时,释放该对象所占据的存储空间。 (4)抽象,实例
(5)析构函数,C++编译系统会自动生成一个析构函数 (6)const (7)this指针 (8)const
(9)包含,子对象 (10)友元函数 (11)友元函数
(12)使同类对象对数据实现共享 (13)类外进行 (14)3 3 (15)obj1:
a=100 b=1.2。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 obj2: a=100 b=3.5 p->obj1:
a=100 b=1.2 (*p)obj1: a=100 b=1.2 p->obj2: a=100 b=3.5 (*p)obj2: a=100 b=3.5 p->new: a=100 b=1.2 (16)
① 执行无参构造函数:x=0y=0
执行一个参数构造函数:x=101y=0 执行两个参数构造函数:x=87y=98 执行析构函数:x=87y=98 执行析构函数:x=101y=0 执行析构函数:x=0y=0
② 执行两个参数构造函数:x=57y=28
执行设置函数:x=0y=0 执行设置函数:x=86y=0 执行显示函数:x=86y=0 执行设置函数:x=24y=75 执行显示函数:x=24y=75 执行析构函数:x=24y=75
③ 执行一个参数构造函数:x=33y=0
执行设置函数:x=86y=543 执行显示函数:x=86y=543 执行复制构造函数:x=86y=543 执行显示函数:x=86y=543 执行析构函数:x=86y=543 执行析构函数:x=86y=543
④ 执行一个参数构造函数:x=33y=0
执行两个参数构造函数:x=223y=54 执行两个参数构造函数:x=38y=84 执行显示函数:x=223y=54 执行析构函数:x=38y=84 执行显示函数:x=33y=0 执行析构函数:x=223y=54 执行析构函数:x=33y=0
2.选择题
(1)以下关于类和对象的叙述错误的是( )。
A. 对象是类的一个实例 B. 任何一个对象都归属于一个具体的类 C. 一个类只能有一个对象 D. 类与对象的关系和数据类型与变量的关系相似 (2)以下关于构造函数的叙述错误的是( )。
A. 构造函数名必须与类名相同 B. 构造函数在定义对象时自动执行 C. 构造函数无任何函数类型 D. 在一个类中构造函数又且仅有一个 (3)以下关于析构函数的叙述错误的是( )。
A. 一个类中只能定义一个析构函数 B. 析构函数和构造函数一样可以有形参 C. 析构函数不允许有返回值 D. 析构函数名前必须冠有符号“~” (4)以下叙述正确的是( )。
A. 在类中不作特别说明的数据成员均为私有类型 B. 在类中不作特别说明的成员函数均为公有类型 C. 类成员的定义必须放在类体内
D. 类成员的定义必须是成员变量在前,成员函数在后 (5)以下叙述不正确的是( )。
A. 一个类的所有对象都有各自的数据成员,它们共享成员函数 B. 一个类中可以有多个同名的成员函数
C. 一个类中可以有多个构造函数、多个析构函数
D. 类成员的定义必须是成员变量在前,成员函数在后 (6)以下不属于构造函数特征的是( )。
A. 构造函数名与类名相同 B. 构造函数可以重载 C. 构造函数可以设置默认参数 D. 构造函数必须指定函数类型 (7)下列函数中,是类MyClass的析构函数的是( )。
A. ~Myclass(); B. MyClass(); C. ~MyClass(); D. ~MyClass(int n); (8)以下关于友元函数的叙述中正确的是( )。
A. 友元函数的实现必须在类的内部定义 B. 友元函数是类的成员函数
C. 友元函数破坏了类的封装性和隐藏性 D. 友元函数不能访问类的私有成员
(9)一个类的友元函数或友元类可以访问该类的( )。
A. 私有成员 B. 保护成员 C. 共有成员 D. 所有成员 (10)下列对静态数据成员的描述正确的是( )。
A. 静态数据成员不可以被类的对象调用 B. 静态数据成员可以在类体内进行初始化
C. 静态数据成员不能受protected控制符的作用 D. 静态数据成员可以直接用类名调用 参考答案:
(1)C (2)D (3)B (4)A (5)C (6)D (7)C (8)C (9)D (10)D
3.简答题
(1)在C++中,对象定义的格式是怎样的?
(2)如果某类定义了五个对象,那么会在内存中存储多少个该类的数据项的副本?多少个其成员函数的幅本?
(3)解释类和对象有什么区别?
(4)公有成员和私有成员有什么区别?