类和对象
01. 分析以下程序执行的结果
#include<iostream.h>
#include<stdlib.h>
class Sample
{
public:
int x,y;
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
}
解:本题说明了重载构造函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数
据成员。所以输出为:x=2,y=3。
注意:构造函数是唯一不能被显式调用的成员函数,它在定义类的对象时自动调用,也称为隐式调用。
02. 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
}
解:本题说明了析构函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员,最后在退出程序时自动调用析构函数。所以输出为:
x=2,y=3
x!=y
注意:析构函数在对象的作用域结束时被自动隐式调用。
03. 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s(2,3), *p=&s;
p->disp();
}
解:本题说明了对象指针的使用方法。这里通过指向对象的指针来调用对象的成员函数。对象指针p指向对象s,p->disp()等价于s.disp()。所以输出为: x=2,y=3。
04. 下面是一个类的测试程序,设计出能使用如下测试程序的类。
实例化类和实例化对象void main()
{
Test a;
a.init(68,55);
a.print();
}
其执行结果为:
测试结果:68-55=13
解:本题是要设计Test类,其设计方法很多,这里给出一种解法。Test类包含两个私有数据成员x、y,以及两个公共成员函数init()和print(),前者用于给数据成员赋值,后者用于x,y的减法运算和输出相应的结果。
#include<iostream.h>
class Test
{
int x,y;
public:
void init(int,int);
void print();
};
void Test::init(int i,int j)
{
x=i;y=j;
}
void Test::print()
{
cout<<"测试结果:"<<x<<"-"<<y<<"="<<x-y<<endl;
}
注意:类是一个外壳,它包含了类实例化时数据和代码的使用方法,它是一种模板,只有在定义类的对象时,才为对象分配空间,而不会为类分配空间。
05. 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
public:
Sample();
Sample(int);
~Sample();
void display();
protected:
int x;
};
Sample::Sample()
{
x=0;
cout<<"constructing normally\n";
}
Sample::Sample(int m)
{
x=m;
cout<<"constructing with a number:"<<x<<endl;
}
void Sample::display()
{
cout<<"display a number:"<<x<<endl;
}
Sample::~Sample()
{
cout<<"destructing\n";
}
void main()
{
Sample obj1;
Sample obj2(20);
obj1.display();
obj2.display();
}
解:本题构造函数与析构函数的调用顺序。这里定义了两个对象,先顺序调用obj1和obj2对象的构造函数,再调用各自的成员函数disp(),最后顺序调用obj2和obj1的析构函数。所以输出为:
constructing nomally
constructing with a number:20
display a number:0
display a number:20
destructing
destructing
06. 设计一个立方体类Box,它能计算并输出立方体的体积和表面积。
解:Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个
构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和disp()(输出结果)。
本题程序如下:
#include<iostream.h>
class Box
{
float a;
float volume;
float area;
public:
Box(){}
Box(float r){a=r;}
void seta(float r){a=r;}
void getvolume(){volume=a*a*a;}
void getarea(){area=6*a*a;}
void disp()
{
cout<<"体积:"<<volume<<"\t表面积:"<<area<<endl;
}
};
void main()
{
Box obj1(4.5),obj2;
obj2.seta(6.4);
volume();
area();
cout<<"obj1=>";
obj1.disp();
volume();
area();
cout<<"obj2=>";
obj2.disp();
}
本程序的执行结果如下:
obj1=>体积:91.125 表面积:121.5
obj2=>体积:262.144 表面积:245.76
07.编写一个程序,在已设置好若干个用户名/口令后,通过输入用户名,查对应的口令,连续执行这一过程直到用户输入结束标记(“end“)为止。
解:设计一个User类,数据成员有User和pass两个字符数组,存储用户名和口令,另有一个构造函数和getuaer()、getpass()两个成员函数,用于获取用户名和口令。在main()中设计一个对象数组ua,当用户输入一个用户名后,在ua中查,到后输出对应的口令,不到时输出相应的提示信息。
本题程序如下:
#include<iostream.h>
#include<string.h>
class User
{
char user[10];
char pass[7];
public:
User(char [],char []);
char *getuser();
char *getpass();
};
User::User(char u[],char p[])
{
strcpy(user,u);
strcpy(pass,p);
}
char *User::getuser()
{
return user;
}
char *User::getpass()
{
return pass;
}
void main()
{
User ua[]={User("Li","123456"),User("wang","654321"),
User("Chen","213412"),User("Xu","878616"),
User("Ma","876574"),User("Song","666666")};
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论