一、实验目的
通过以一个类为基类来为其建立派生类的方法,掌握面向对象程序设计中类的继承性、层次性等特性以及派生类中给基类构造函数传递参数的方法,掌握基类中不同访问权限的成员在派生类中的访问权限。 继承是C++语言的一种重要机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有类中没有的成分来建立类。理解继承是理解面向对象程序设计所有方面的关键。 能利用现有的类建立新类,能理解继承如何提高软件的可重用性,理解多态性对于继承的意义,掌握多态的工作原理。 派生类(子类)继承它父类的属性和操作,在继承中,基类的 private 对所有的外界都屏蔽(包括自己的派生类),基类的protected控制符对应用程序是屏蔽的,但对其派生类是可访问的。
存取方式与继承关系
存取方式 | |||
public | protected | private | |
public | public | protected | private |
protected | protected | protected | private |
private | private | private | private |
二、实验内容
使用 Visual C++ 6.0 建立一个类A,然后派生出两个类B和C。
三、实验要求
1、要求类A的公有段、保护段、私有段分别都有对应的数据和成员函数;
2、分别以public和private的方式派生出两个类B、C;
3、通过B和C的构造函数传递参数给基类A的构造函数,验证它们之间的调用关系和调用顺序;
4、在这两个派生类中实现对基类成员的访问,在基类的基础上增加新的成员函数;
5、编制主程序验证派生类的正确性。
四、实验课后要求
1、整理课内上机的结果、体会;
2、完成实验报告。
实验代码:
//shuiguo.h
#ifndef SHUIGUO_H_
#define SHUIGUO_H_
class shuiguo//基类,水果
{
private:
int sum;//总数
int kind;//种类数量
public:
shuiguo():sum(0),kind(0){}
shuiguo(int s, int k) :sum(s), kind(k){}
virtual void display();
void change(int,int);
};
class banana:public shuiguo//香蕉,具有has-a关系的公有继承
{
private:
float cal;//卡路里
public:
banana() :shuiguo(), cal(0.0){}
banana(int s, int k, float c) :shuiguo(s, k), cal(c){}
virtual void display();
};
class maochong :private shuiguo//毛毛虫,具有is-a关系的私有继承
{
private:
int number;//毛虫数量
public:
maochong() :shuiguo(), number(0){}
maochong(int s, int k, int n) :shuiguo(s, k), number(n){}
virtual void display();
};
#endif
//shuiguo.cpp
#include
#include"shuiguo.h"
using namespace std;
void shuiguo::display()
{
cout << "总数: " << sum << " " << "种类: " << kind << endl;
}
void shuiguo::change(int a,int b)
{
sum = a;
kind = b;
}
void banana::display()
{
shuiguo::display();
cout << "卡路里: " << cal << endl;
}
void maochong::display()
{
shuiguo::display();
cout << "总数; " << number << endl;
}
//user.cpp
#include"shuiguo.h"
#include
using namespace std;
int main()
{
//一般对象实现
shuiguo a;
a.display();
a.change(100,10);
a.display();
shuiguo b(200, 20);
b.display();
banana c;
c.display();
c.change(100, 10);
c.display();
banana d(200, 20, 3);
d.display();
maochong e;
e.display();
maochong f(100, 10, 100);
f.display();
//指针对象实现(简化版)
shuiguo *g;
g= new shuiguo[1];
g[0]=shuiguo(100,10);
g[0].display();
banana *l;
l = new banana[1];
l[0] = banana(200, 20, 3);
l[0].display();
maochong *k;
k = new maochong[1];
k[0] = maochong(100, 10, 100);
k[0].display();
return 0;
}