c++实验报告 继承与派生
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年 第 二 学期 )
课程名称:C++程序设计 开课实验室: 年 月 日
实验目的
1.学习定义和使用类的继承关系,定义派生类。
2.熟悉不同继承方式下对基类成员的访问控制。
3.学习利用虚基类解决二义性问题。
题目1:
定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函 数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会 有问题吗?编程试试看。
实验步骤:
编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成 员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:
-1-
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。
源程序1
/****** lab7-1.cpp ******/
#include <iostream.h>
class Animal
{
//protected:
int age;
public:
Animal(int a)
{ age=a; cout<<"我是基类构造函数,我创建基类对象age="<<age<<endl; } ~Animal() { } int getage() const { } void setage(int a) { age=a; -2- cout<<"我是基类析构函数,我释放基类对象age="<<age<<endl; return age;
}; }
class Dog:public Animal
{
int color;
public:
Dog(int a=10,int c=3):Animal(a),color(c)
{ //setage(a); cout<<"我是子类构造函数,我创建子类对象color="<<color<<" age="<<getage()<<endl;
};
void main()
{Dog a;
}
运行结果截图
-3- } ~Dog() { } cout<<"我是子类析构函数,我释放子类对象color="<<color<<endl;
题目2:
定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass, 观察构造函数和析构函数的执行情况。
实验步骤:
编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7—2.cpp。
源程序2
/****** lab7-2.cpp ******/
#include<iostream>
using namespace std;
class BaseClass
{
protected:
int number;
public:
BaseClass() { } ~BaseClass() { } -4- number=1; cout<<number<<" 基类构造函数"<<endl; number=4; cout<<number<<" 基类析构函数"<<endl;
};
class DerivedClass:public BaseClass
{
public:
};
void main()
{
}
运行结果截图
-5- DerivedClass() { } ~DerivedClass() { } number=3; cout<<number<<" 子类析构函数"<<endl; number=2; cout<<number<<" 子类构造函数"<<endl; cout<<"执行情况:"<<endl; DerivedClass a;
题目3:
定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成 员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度 (Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar 派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把 vehicle设置为虚基类,会有什么问题?编程试试看。
实验步骤:
编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7—3.cpp。
编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。
这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。 源程序3
/****** lab7-3.cpp ******/
#include<iostream>
using namespace std;
class Vehicle
{
int MaxSpeed,Weight;
public:
Vehicle() -6-
}; } inline run() { } inline stop() { } cout<<"stoped!"<<endl; cout<<"The MaxSpeed is 100km/h!"<<endl; cout<<"The Weight is 5000kg!"<<endl;
class Bicycle:public Vehicle
{
public:
};
class Motorcar:public Vehicle
-7- inline Height() { } cout<<"The Height is 2m!"<<endl;
public:
{
}
};
class Motorcycle:public Bicycle,public Motorcar {
public:
{
};
void main()
{
inline SeatNum() cout<<"The number of seat is 7!"<<endl; Motorcycle() } cout<<"This is Motorcycle!"<<endl; Vehicle a; a.run(); a.stop(); Bicycle b; b.Height(); -8-
} Motorcar c; c.SeatNum(); c.stop(); Motorcycle d;
运行结果截图
-9-
…… 此处隐藏:1001字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




