类和对象
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小时内删除。