内蒙古科技大学面向对象的程序设计实验8 继承(一)

合集下载

内蒙古科技大学面向对象的程序设计实验3 函数

内蒙古科技大学面向对象的程序设计实验3 函数

内蒙古科技大学面向对象的程序设计实验报告一、实验目的(1)掌握定义函数的方法、函数实参与形参的对应关系以及“值传递”的方式。

(2)掌握引用做函数参数的方法。

(3)理解和使用函数重载以及带默认参数的函数。

二、实验环境编译器:Visual C++ 6.0.操作系统:Windows 7旗舰版三、实验内容2.1 练习(一):通过下面的步骤实现函数功能:1. 写一个判别素数的子函数prime,在主函数输入一个整数,输出是否为素数的信息。

2. 按要求编写程序,生成后执行,并分析输出的信息。

要求:使用cin语句分别输入以下测试数据:17,34,2,1,0。

分别运行并检查结果是否正确。

2.2 练习(二):1.设计一个函数:exchange(float x, float y, float z),当调用exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。

2. 使用函数重载的方法定义两个重名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,如果没有输入第二点的坐标则采用函数缺省参数的方法默认为圆点(0,0)。

四、实验过程练习3-1.1运行结果如下运行结果为34,0,1不是素数,17和2是素数,与实际情况无误,运行结果正确练习3-2.1代码截图如下原设置a=1.1 b=22.2 c=333.3变化之后a=333.3 b=1.1 c=22.2运行结果无误练习3-2.2源代码截图如下测试数据结果如下五、实验总结实验源代码:练习(一)#include<iostream.h> void prime(int x);void main(){int n;while(1){cout<<"请输入n:";cin>>n;prime(n);}}void prime(int x){if(x==0||x==1)cout<<x<<" is no prime"<<endl;else{int i=2;while(i<x){if(x%i==0)break;i++;}if(i==x)cout<<x<<" is prime"<<endl;elsecout<<x<<" is no prime"<<endl;}}练习(二)#include<iostream.h>void exchange(float &x,float &y,float &z); void main(){float a=1.1,b=22.2,c=333.3;cout<<"调用exchange之前"<<endl;cout<<"a:"<<a<<endl;cout<<"b:"<<b<<endl;cout<<"c:"<<c<<endl;exchange(a,b,c);cout<<"调用exchange之后"<<endl;cout<<"a:"<<a<<endl;cout<<"b:"<<b<<endl;cout<<"c:"<<c<<endl;}void exchange(float &x,float &y,float &z) {float cache;cache=y;y=x;x=z;z=cache;}练习(三)#include <iostream.h>#include <math.h>int distance(int x1,int y1,int x2=0,int y2=0){cout<<"调用int distance"<<endl;int dis=sqrt((int)(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));return dis;}double distance(double x11,double y11,double x22=0.0,double y22=0.0) {cout<<"调用double distance"<<endl;double dis=sqrt((int)(x11-x22)*(x11-x22)+(y11-y22)*(y11-y22));return dis;}void main(){int x1,y1,x2=0,y2=0;int i;double x11,y11,x22,y22;char c;cout<<"请输入整形平面第一点的横坐标与纵坐标:"<<endl;cin>>x1>>y1;cout<<"是否输入整形平面第二点的横坐标与纵坐标? ’Y’确定,否则跳过"<<endl;cin>>c;if(c==’Y’||c==’y’){cout<<"请输入整形平面第二点的横坐标与纵坐标:"<<endl;cin>>x2>>y2;}cout<<endl;cout<<"请输入双精度平面第一点的横坐标与纵坐标:"<<endl;cin>>x11>>y11;cout<<"是否输入双精度平面第二点的横坐标与纵坐标? ’Y’确定,否则跳过"<<endl;cin>>c;if(c==’Y’||c==’y’){。

面向对象程序设计——员工继承关系程序设计

面向对象程序设计——员工继承关系程序设计
学生自评
学生根据对执行任务过程进行自评,给出相应的成绩,占10%
学生互评
学生间根据课堂口语表达及表现,互相评价,占10%
教师评价
教师根据对学生的学习态度、出勤、课堂表现、沟通与表达能力,并结合执行任务过程的各个环节进行评价,占20驰
合计
1.打开ECliPSe,包中定义员工类:
2.在员工类中只定义共有的成员变量,定义类的构造方法,定义共有的方法;
3.定义行政类,经理类,只定义自己特有属性和方法,父类己有的成员变量和成员
方法不再定义;
4.编写测试类,分别声明对象进行调用。
总结知识点
评价
类别
比例
成绩
签名
成果评定
根据学习成果评定成绩,占60%
实现思路
员工类、行政人员类、经理类有许多相同的语句代码。在属性方面,都包含了年龄、性别等重复的信息定义。换个思路,员工是一般性的概念,在定义类时,将经理类、行政类中相同的属性和方法抽象出来,集中放在员工类中,形成一种共享的机制,经理类、行政类中只放自己特有的成员变量和成员方法,减少重复代码。这样的员工类称为父类,行政人员类、经理类称为子类。子类继承父类的非私有成员变量和成员方法。
学习模块
面向对象程序设计一员工继承关系程序设计
知识点
继承、super、多态
工作任务
编写员工继承关系程序
任务目标
1、理解继承的概念
2、理解父类与子类之间的关系
3、掌握this、SUPer关键字
4、掌握多态
5、掌握最终类和抽象类
接受任务班组
姓名
任务行
公司中含有三类员工分别是雇员、行政人员和经理。由于类别不同对于三类员工分别使用类进行标示。要求雇员包含:属性有姓名和工号;行为有工作和加班。行政人员包含:属性有姓名、工号和职务;行为有工作和管理。经理包含:属性有姓名、工号、职务和部门;行为有工作和外交。使用继承技术实现公司员工的信息管理。

《面向对象程序设计》教案

《面向对象程序设计》教案

《面向对象程序设计》教案一、教案简介本教案旨在帮助学生掌握面向对象程序设计的基本概念、原理和方法,培养学生的编程能力和软件开发思维。

通过本课程的学习,学生将能够熟练运用面向对象的编程语言,如Java或C++,进行软件开发和设计。

二、教学目标1. 了解面向对象程序设计的基本概念,如类、对象、封装、继承和多态等。

2. 掌握面向对象程序设计的基本原则,如单一职责原则、开闭原则、里氏替换原则等。

3. 学会使用面向对象的编程语言进行程序设计和开发。

4. 培养学生的软件开发思维和团队协作能力。

三、教学内容1. 面向对象程序设计的基本概念1.1 类与对象1.2 封装1.3 继承1.4 多态2. 面向对象程序设计的基本原则2.1 单一职责原则2.2 开闭原则2.3 里氏替换原则2.4 接口隔离原则2.5 依赖倒置原则3. 面向对象的编程语言3.1 Java3.2 C++4. 面向对象的设计模式4.1 创建型模式4.2 结构型模式4.3 行为型模式四、教学方法1. 讲授法:讲解面向对象程序设计的基本概念、原理和编程方法。

2. 案例分析法:分析实际项目中的面向对象设计案例,让学生理解并掌握面向对象的设计思想。

3. 实践操作法:让学生通过编写代码,亲身体验面向对象程序设计的流程和方法。

4. 小组讨论法:分组进行讨论,培养学生的团队协作能力和解决问题的能力。

五、教学评价1. 课堂参与度:评估学生在课堂上的发言和提问情况,了解学生的学习兴趣和积极性。

2. 课后作业:布置相关的编程作业,检查学生对面向对象程序设计知识的掌握程度。

3. 项目实践:评估学生在团队项目中的表现,包括代码质量、设计思路和团队协作能力。

4. 期末考试:全面测试学生对面向对象程序设计知识的掌握情况。

六、教学资源1. 教材:推荐《Java面向对象程序设计》、《C++ Primer》等经典教材。

2. 在线资源:提供相关的在线教程、视频课程和编程练习平台,如慕课网、Coursera、LeetCode等。

《 面向对象程序设计》课程设计实验报告

《 面向对象程序设计》课程设计实验报告

《面向对象程序设计》课程设计实验报告指导教师小组成员:专业班级: 2010级计算机科学与技术专业开设时间:2011-2012(一)目录1.任务1 (2)1.1 任务介绍 (2)1.2 小组成员任务分配 (2)1.3.1设计思想及主要流程图 (2)1.3.1主要程序清单 (2)1.3.1 运行结果及分析 (4)1.3.2设计思想及主要流程图 (2)1.3.2主要程序清单 (2)1.3.2 运行结果及分析 (4)1.3.3设计思想及主要流程图 (2)1.3.3主要程序清单 (2)1.3.3 运行结果及分析 (4)2.任务2 (2)2.1 任务介绍 (2)2.2 小组成员任务分配 (2)2.3设计思想及主要流程图 (2)2.3主要程序清单 (2)2.3 运行结果及分析 (4)3收获、体会和建议 (4)任务1.按照要求设计类 1.根据输出设计类设计类就是根据数据封装的要求,抽象出适合的类。

有如下测试程序和测试程序的输出结果,要求设计类Welcome 。

void main() { Welcome we; Welcome you(we); you.Display();you.Set(“Thank you.”);cout<<you.Get()<<endl; you.talk(); you.Display();}测试程序的输出结果如右: 设计类Welcome 的原则 1)在头文件Cpp1.h 中声明类 2)在Cpp1.cpp 中实现类3)使用内联函数定义Display()函数2.使用类改写程序编写一个求方程02=++c bx ax 的根的程序,用三个函数分别求当ac b 42+大于零、等于零和小于零时方程的根。

要求从主函数输入a 、b 、c 的值并输出结果。

使用面向过程的解法一般是把变量设为double 型,适用库函数cmath 进行计算。

请注意:使用面向对象的方法解决这个问题,首先要从解一元二次方程出发,抽象一个代表一元二次方程的类。

面向对象程序设计(C++)实验报告

面向对象程序设计(C++)实验报告

面向对象程序设计(C++)实验报告姓名:刘九州学院:数学与计算机学院班级:10级计算机大类三班学号:100511314实验5 单继承一、实验目的1.掌握派生的类别与方式;2.了解派生类中如何使用基类的成员、基类成员在派生类中的访问控制;3. 掌握继承中构造函数和析构函数的调用过程。

二、实验内容及步骤1.给出一个Document类,从Document派生出Book类,增加PageCount变量。

在主函数中进行测试,创建Book类对象并进行初始化,输出书名和页数。

2.设计一个单基继承的类层次程序,利用Person类派生出Student类,增加属性xh(学号),Person类中至少有姓名、年龄等数据成员,成员函数中构造函数对其初始化,析构函数释放相应存储单元,输出函数输出其数据成员的值,其它成员函数根据需要添加,在主函数中进行测试。

3.设计一个人员类person和一个日期类date,由人员类派生出学生类student和教师类professor,学生类和教师类的数据成员birthday为日期类。

在主函数中进行测试。

三、实验源程序和运行结果实验(一)源程序:#include<iostream>#include<string>using namespace std;class Document{public:Document(){};~Document();Document(char*name);char *Name;void PrintNameOf();};Document::Document(char*name){Name=new char[strlen(name+1)];strcpy(Name,name);}Document::~Document(){delete []Name;}void Document::PrintNameOf(){cout<<Name<<endl;}class Book:public Document{public:int PageCount;Book(char *a,int b):Document(a){PageCount=b;}};void main(){char BookName[20];int n;cout<<"请输入书名:"<<endl;cin>>BookName;cout<<"请输入书的页数:"<<endl;cin>>n;Book b(BookName,n);cout<<"书名为:"<<<<endl;cout<<"页数为:"<<b.PageCount<<endl;}运行结果:实验(二)源程序:#include<iostream>#include<string>using namespace std;class person{public:person(){name="张三";age=0;}person(string c,int a){name=c;age=a;}~person(){}void setname(string c){name=c;}string getname(){return name;}void setage(int a){age=a;}int getage(){return age;}private:string name;int age;};class student:public person{public:student(){xh=0;}student(int d){xh=d;}student(string c,int a,int d):person(c,a){xh=d;}~student(){}void setxh(int d){xh=d;}int getxh(){return xh;}private:int xh;};void main(){string c;cout<<"请输入学生的姓名:\n";cin>>c;cout<<"请输入学生的年龄:\n";int a;cin>>a;cout<<"请输入学生的学号:\n";int d;cin>>d;student n(c,a,d);cout<<"请输入学生的姓名为:"<<n.getname()<<endl;cout<<"请输入学生的年龄为:"<<n.getage()<<endl;cout<<"请输入学生的学号为:"<<n.getxh()<<endl; }运行结果:实验(三)源程序:#include<iostream>using namespace std;class person{public:person(){name="张三";age=0;}person(string c,int a){name=c;age=a;}~person(){}void setname(string c){name=c;}string getname(){return name;}void setage(int a){age=a;}int getage(){return age;}private:string name;int age;};class date{public:date(){year=2011;month=12;day=17;}~date(){}date(int y,int m,int d){year=y;month=m;day=d;}int getyear(){return year;}int getmonth(){return month;}int getday(){return day;}private:int year;int month;int day;};class student:public person{public:student(){// birthday.date();}student(int y,int m,int d):birthday(y,m,d){}~student(){}void getbirthday(){cout<<"学生的生日为:\n";cout<<birthday.getyear()<<"年"<<birthday.getmonth()<<"月"<<birthday.getday()<<"日"<<endl;}private:date birthday;};class teacher:public person{public:teacher(){// birthday.date();}teacher(int y,int m,int d):birthday(y,m,d){//birthday.date(y,m,d);}~teacher(){}void getbirthday(){cout<<"老师的生日为:\n";cout<<birthday.getyear()<<"年"<<birthday.getmonth()<<"月"<<birthday.getday()<<"日"<<endl;}private:date birthday;};void main(){cout<<"请输入学生的生日:"<<endl;int y,m,d;cin>>y>>m>>d;student s(y,m,d);cout<<"请输入老师的生日:"<<endl;cin>>y>>m>>d;teacher t(y,m,d);s.getbirthday();t.getbirthday();}运行结果:实验6 多继承一、实验目的1.掌握多基继承的使用,访问方法;2.理解类层次中访问规则;3.掌握虚基类的定义及使用。

内蒙古科技大学课程设计说明书

内蒙古科技大学课程设计说明书

内蒙古科技大学课程设计说明书C++设计报告班级:08电信一班姓名:赵同景学号:0867118135一、前言……………………………………………………二、程序功能介绍…………………………………………三、类设计………………………………………………….四、程序流程图…………………………………………….五、源程序…………………………………………………六、调试及运行结果………………………………………七、重点难点体会参考文献……………………………………………………前言:此程序使用C++语言设计,运行软件选择Microsoft Visual C++6.0。

计算机系统环境为windows XP。

一、程序功能介绍此程序主要功能可分为6个模块:①输入功能②查询功能③按价格排序④显示信息⑤退出系统所有功能模块均设计为car类或者manage的成员函数,通过switch 函数选择语句调用不同的成员函数而实现各个功能,switch 中的选项输错时自动返回重新输入通过manage类中的成员函数对系统进行管理;二、类设计本程序中只含有2个类,即car和manage在主程序中用manage类定义一个对象a,通过此对象调用各模块对系统的各成员函数进行调用,以此实现各个功能Car类所包含的成员:私有成员:1.carname字符数组//用于储存汽车名2.numberr长整型数据//用于储存汽车型号公有成员:price 双精度数据//用于储存汽车价格1.getcar()函数//用于将存于内存中的信息保存到文件中2.display ()函数//用于添加新的联系人manage 类包含的成员:私有成员:1:choice2:ncar公有成员:manage()//构造函数为ncar赋初值dismenu()//管理菜单input()//为系统输入信息output()//输出查询信息showall()//显示信息run()//为系统选择所要调用的函数sort()//为系统排序car cars[50]三、程序流程图五.源程序代码#include<iostream.h> #include<string.h> class car{public:void getcar(char * cn ,long num,double p)//记录输入{strcpy(carname,cn);number=num;price=p; }void display();double price; //价格private:char carname[20]; //汽车名long number; //型号};void car::display(){cout<<"汽车名:"<<carname<<"型号:"<<number<<"价格:"<<price<<endl;}class manage//管理功能{public:manage(){ncar=1;}void dispMenu();void sort();void input();void output();void showall();void run();car cars[50];private:int choice;int ncar;};void manage::dispMenu()//管理菜单{cout<<"===========车辆管理系统=========="<<endl;cout<<"1.输入记录"<<endl;cout<<"2.查询记录"<<endl;cout<<"3.按价格排序"<<endl;cout<<"4.显示信息"<<endl;cout<<"5.退出"<<endl;cout<<"输入选项(1—5):";cin>>choice;}void manage::input()//输入功能{char carname[20];long number;double price; cout<<"输入汽车名字:";cin>>carname;cout<<"输入型号:";cin>>number;cout<<"输入价格:";cin>>price;cars[ncar].getcar(carname,number,price); ncar++;}void manage::output()//输出查询信息{ int a;cout<<"显示第几号数据(1~10):";cin>>a;cars[a].display();}void manage::sort()//排序功能{car temp;for(int j=1;j<ncar;j++)for(int k=j;k<ncar;k++)if(cars[j].price<cars[k].price) {temp=cars[j];cars[j]=cars[k];cars[k]=temp;}showall();}void manage::showall() {for(int j=1;j<ncar;j++) cars[j].display();}void manage::run(){do{dispMenu();switch(choice){case 1:input();break;case 2:output();break;case 3:sort();break;case 4:showall();break;}} while(choice!=5);}int main(){manage a;a.run();return 0;}六.调试及运行结果程序运行调用dismenu()函数打印菜单,如图6-1.图6-1选择1系统运行输入功能,,如图6-2图6-2选择2,运行查询记录功能模块,如图6-3。

C++面向对象程序设计》实验报告

C++面向对象程序设计》实验报告

《C++面向对象程序设计》实验内容实验1 C++程序设计初步1.实验目的(1)了解在C++编译系统(Visual C++6.0)上如何编辑、编译、连接和运行一个C++程序。

(2)通过运行简单的C++程序, 初步了解C++源程序的结构和特点。

(3)掌握简单C++程序的编写和调试方法。

(4)掌握重载函数的定义方法。

(5)能正确使用引用型变量。

2.实验内容和步骤(1)在Visual C++环境下编译和运行C++程序①先进入Visual C++6.0环境。

②在自己指定的子目录中建立一个名为test.cpp的新文件。

③从键盘输入以下程序int main(){int a,b;c=a+b;cout>> “a+b=”>>a+b;}选择Build→Compile test.cpp命令, 对此源程序进行编译。

观察和分析编译信息。

⑤根据编译信息指出的错误, 修改程序。

再进行编译, 如果还有错, 再重复此过程, 直到编译不出错为止。

⑥选择Build→Build test.exe命令, 对程序进行连接, 如果不出错, 就会生成可执行程序test.exe。

⑦选择Build→Execute test.exe命令, 执行可执行程序test.exe。

观察屏幕的变化。

在输出窗口应显示程序运行结果。

⑧分析结果是否正确, 如果不正确或认为输出格式不理想, 可以修改程序, 然后重新执行以上④和⑧步骤。

改过后的程序:#include<iostream>using namespace std;int add(int x,int y){int z;z=x+y;return(z);}int main(){int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return 0;}实验2 C++对C的扩充(2)编一个程序, 用来求2个或3个正整数中的最大数。

《面向对象程序设计》实验指导书 (1-6个实验,含参考代码)要点

《面向对象程序设计》实验指导书 (1-6个实验,含参考代码)要点

面向对象程序设计实验指导书(适用:电子信息11级)彭召意陶立新编写计算机与通信学院2014.9目录实验一 C++基础的应用 (1)实验二类和对象的应用 (3)实验三类的构造函数、析构函数的应用 (4)实验四友员和运算符重载 (5)实验五类的继承与派生 (6)实验六类的多态性与虚函数 (7)附录:各实验的程序代码 (8)实验一 C++基础的应用(实验课时:2 实验性质:设计)实验名称: C++基础的应用实验目的: (1)进一步学习VC++6.0开发环境及程序调试方法。

(2)练习C++函数的定义及使用;(3)练习C++数组的定义及使用;(4)练习C++指针的定义及使用;(5)练习C++结构体的定义及使用;(6)练习多文件的程序的编译和运行方法;实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: (1)熟悉Visual C++6.0编译系统的常用功能,特别是debug调试功能;(2)编程1:编写一个程序c1.cpp,用来求2个或3个整数的最大数。

要求:用重载函数的方法来求最大数;函数原型:int max( int a, int b) 和int max( int a, int b,int c)。

(3)编程2:编写一个程序c2.cpp,求:a!+ b! + c!的值。

要求:使用递归函数。

主程序和函数分开到两个源程序文件中,分别进行编译后,再运行;(4)编程3:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;(5)编程4:建立一个动态链表并进行输出和删除管理。

链表的每个节点为学生信息,包括:学号,姓名,性别,下一学生信息的指针。

程序的工作:(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内蒙古科技大学面向对象的程序设计实验报告一、实验目的1.理解继承的含义以及声明;2.理解共有派生、私有派生和保护派生的含义以及使用;3.理解单派生类中构造函数和析构函数的调用顺序。

二、实验环境编译器:Visual C++ 6.0.操作系统:Windows 7 旗舰版三、实验内容2.1练习(一):1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream.h"class CBase{public:CBase(int a):a(a){}protected:void print(){cout<<"a="<<a<<endl;}private:int a;};class CDerive : public CBase{public:void print(){CBase::print();cout<<"b="<<b<<endl;}private:int b;};void main(){CDerive d;d.print();CBase b;b.print();}问题一:以上程序有两大错误,试指出来,并改正之?2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream.h"class CBase{public:CBase(int a):a(a){cout<<"base structure"<<endl;}~CBase(){cout<<"base destructure"<<endl;}void print(){cout<<"a="<<a<<endl;}protected:int a;};class CDerive : public CBase{public:CDerive(int a, int b,int c):CBase(a),b(b),c(c){cout<<"derive structure"<<endl;}~CDerive(){cout<<"derive destructure"<<endl;}void print(){CBase::print();cout<<"b.a="<<b.a<<endl;cout<<"c="<<c<<endl;}private:CBase b;int c;};void main(){CDerive d(1,2,3); -----------------------------------------------------①d.print();}问题一:以上程序的输出结果是什么,说明为什么?问题二:①处语句执行完后,d.b.a的值为多少?2.2练习(二):1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:a.CLine类含有计算直线长度和斜率的成员函数;b.CCircle类含有计算圆面积的成员函数。

四、实验过程练习1实验题目源代码如下:直接编译结果如下:查看错因,首先前两句话写明,在创建CBase和CDerive对象时候,没有传递参数,实际代码中CDerive根本没有正确的构造函数,代码区中加入一段带有初始化列表的构造函数第三句话指明基类对象b直接调用CBase类保护成员函数,属于类外调用,权限错误,此处可以将print的权限改为public修改后的代码如下:然后尝试编译运行:运行成功,符合题意练习2实验题目提供源代码如下:尝试编译:错误集中在基类成员数据a上,分析代码,CDerive类对象d 创建时候一共有三个参数,1传递至派生类,再调用基类构造函数,3直接传递给派生类构造函数, 2传递给了派生类的中内嵌的基类成员对象,然而在公有继承下,派生类对象只能访问基类的公有数据,所以此处将a的权限改为public,修改之后的代码如下:尝试编译运行:结果和代码本意相同,修改成功练习3根据题意,设计代码如下:面积计算以及斜率计算分别写在了CLine类和CCircle类的构造函数中,在创建对象的时候输入x2,y2 r即可算出距离和面积试运行结果如下:运行结果正确五、实验总结实验源代码:练习(一)#include "iostream.h"class CBase{public:CBase(int a):a(a){}// protected:void print() //错误1.CBase类对象类外无法直接调用此主函数,应该改为public型{cout<<"a="<<a<<endl;}private:int a;};class CDerive : public CBase{public:CDerive(int a,int b):CBase(a),b(b) //错误2.构造函数错误,初始化列表和参数错误{}void print(){CBase::print(); //保护继承下,派生类中可以访问基类的公有和保护数据cout<<"b="<<b<<endl;}private:int b;};void main(){CDerive d(0,0); //因为原题构造函数中有形参,所以创建要加上参数d.print();CBase b(0);b.print();}/*#include "iostream.h"class CBase{public:CBase(int a):a(a){}protected:void print(){cout<<"a="<<a<<endl;}private:int a;class CDerive : public CBase {public:void print(){CBase::print();cout<<"b="<<b<<endl;}private:int b;};void main(){CDerive d;d.print();CBase b;b.print();}*/练习(二)#include "iostream.h"class CBase{public:CBase(int a):a(a){cout<<"base structure"<<endl; }~CBase(){cout<<"base destructure"<<endl; }void print(){cout<<"a="<<a<<endl;}public:int a;class CDerive : public CBase{public:CDerive(int a, int b,int c):CBase(a),b(b),c(c){cout<<"derive structure"<<endl;}~CDerive(){cout<<"derive destructure"<<endl;}void print(){CBase::print();cout<<"b.a="<<b.a<<endl; //公有继承下派生类子对象只能访问基类的公有数据;cout<<"c="<<c<<endl;}private:CBase b;int c;};void main(){CDerive d(1,2,3);// -----------------------------------------------------①d.print();}/*1.没有任何输出结果,因为程序无法通过编译2.d.b.a的值为2 ,因为构造函数实参的第二个元素2,传递给CDerive类的子对象b,b.a被初始化为2 *//*#include "iostream.h"class CBase{public:CBase(int a):a(a)cout<<"base structure"<<endl;}~CBase(){cout<<"base destructure"<<endl;}void print(){cout<<"a="<<a<<endl;}protected:int a;};class CDerive : public CBase{public:CDerive(int a, int b,int c):CBase(a),b(b),c(c){cout<<"derive structure"<<endl;}~CDerive(){cout<<"derive destructure"<<endl;}void print(){CBase::print();cout<<"b.a="<<b.a<<endl;cout<<"c="<<c<<endl;}private:CBase b;int c;};void main(){CDerive d(1,2,3); -----------------------------------------------------①d.print();}*/练习(三)#include <iostream.h>#include <math.h>class CPoint{private:float x,y;public:CPoint(float x1,float y1):x(x1),y(y1){cout<<"--------CPoint基类构造函数已调用---------"<<endl; }void display(){cout<<"x= "<<CPoint::x<<" "<<"y= "<<CPoint::y<<endl; }};class CLine:public CPoint{private:double k;double l;public:CLine(float x1,float y1):CPoint(x1,y1){cout<<"--------CLine派生类构造函数已调用--------"<<endl; float x2,y2;cout<<"Please input x2,y2:"<<endl;cin>>x2>>y2;l=sqrt((x1-x2)*(x1-x2)+(y2-y1)*(y2-y1));cout<<"l:"<<l<<endl;if(y2-y1!=0){k=(y2-y1)/(x2-x1);cout<<"k= "<<k<<endl;}elsecout<<"分母为0,k不存在"<<endl;}};class CCircle:public CPoint{private:double r;public:CCircle(float x1,float y1):CPoint(x1,y1){cout<<"--------CCircle派生类构造函数已调用------"<<endl; cout<<"please input r:"<<endl;cin>>r;cout<<"S= "<<3.14159*r*r<<endl;}};void main(){float x1,y1;cout<<"Please input x1,y1:"<<endl;cin>>x1>>y1;CPoint CP(x1,y1);CP.display();CLine CL(x1,y1);CCircle CC(x1,y1);}六、参考文献参考的资料:C++面向对象程序设计。

相关文档
最新文档