实验要求:
1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试,并在本次报告的心得中说明对该问题的理解。
2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass(其中派生类有一基类BaseClass对象的私有成员,即 ),观察构造函数和析构函数的执行情况(在构造函数和析构函数中用cout输出提示信息)。
3.定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,run、stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意将适当的类设置为虚基类。在主函数中调用vehicle类的run和stop函数,编程完成各个类的定义。
题目一
编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:
error C2248 : ‘age’ : cannot access private member declared in class ‘Animal’
error C2248 : ‘age’ : cannot access private member declared in class ‘Animal’
把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。
#include<iostream>
using namespace std;
class Animal{
public:int age;
};
class dog:public Animal{
public:void SetAge(int n){age=n;};
int GetAge(){return age;};
};
int main()
{
dog d;
d.SetAge(1);
cout<<d.GetAge()<<endl;
return 0;
}
题目二
编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7_2.cpp。用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。
#include <iostream>
using namespace std;
class BaseClass{
public:BaseClass(int x){Number =x;cout<<"Construct BaseClass"<<endl;};
BaseClass(){cout<<"Construct BaseClass"<<endl;};
~BaseClass(){cout<< "Destruct BaseClass"<<endl;};
int Number ;};
class DerivedClass:public BaseClass{
public:
DerivedClass(int x,int y): a(x){ Number=y; cout<<"Construct DerivedClass"<<endl;};
~DerivedClass(){cout<<"Destruct DerivedClass"<<endl;};
private: BaseClass a;
};
int main()
{
DerivedClass obj(1,2);
return 0;
}