内蒙古科技大学面向对象的程序设计实验8-继承(一)
- 格式:docx
- 大小:200.98 KB
- 文档页数:19
面向对象程序设计(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。
实验二面向对象的程序设计(2课时)一、实验目的1 )熟悉类的定义和使用。
2)掌握创建对象的方法。
3)掌握只读字段的声明及使用。
4)学习定义和使用带参数构造函数。
5)熟悉访问权限控制符。
6)掌握属性的定义和使用。
7)掌握关键字this。
8)理解继承的概念,学会定义和使用派生类。
9)学会定义和使用接口。
10)掌握继承过程中的方法重写,区分它与方法隐藏、方法重载的不同。
11)掌握多态。
12)熟悉关键字base。
二、实验要求1)程序结构清晰、语句完整,包含有头文件和main函数;2)格式正确,语句采用缩进格式;3)设计子函数实现题目要求的功能;4)编译、连接通过,熟练使用命令键;5)运行结果正确,输入输出有提示,格式美观。
三、实验设备、材料和工具1)奔腾2计算机或以上机型2)C#.NET2008四、实验内容和步骤实验内容:1、创建一个描述图书信息的类并测试。
类中应保存有图书的书号、标题、作者、出版社、价格等信息。
步骤:1)定义图书类Book,Book类中包含isbn(书号)、title (标题)、author(作者)、press (出版社)、price (价格)等私有字段。
由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。
2)为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。
3)为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。
4)为Book类定义方法Show,Show方法用于显示图书的所有信息。
5)编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。
2、根据几何图形的组合与继承关系定义用于描述点、直线、三角形、四边形、正方形、圆等几何图形的类(或结构)。
要求首先定义一个几何图形接口描述所有几何图形的共有特性,上述几何图形都必须现实该接口,并且其中用于描述点的类型最好定义为结构。
《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. 单继承和多继承:- 单继承:一个子类只能继承一个父类的属性和方法。
- 多继承:一个子类可以同时继承多个父类的属性和方法。
在单继承中,子类只能直接继承一个父类,但可以通过继承链间接地继承多个父类。
在多继承中,子类可以直接继承多个父类。
2. 可见性和访问控制:继承关系中,父类的属性和方法可以被子类继承和访问。
然而,有时我们希望将某些属性或方法隐藏起来,只允许在父类内部访问。
这就引出了可见性和访问控制的概念。
- 公共可见性:表示属性和方法允许在类的内部和外部访问。
- 受保护的可见性:表示属性和方法只允许在类的内部和子类中访问。
- 私有可见性:表示属性和方法只允许在类的内部访问。
可见性和访问控制允许我们灵活地控制子类对父类的继承内容的访问权限。
3. 方法重写和多态:子类有权重写继承自父类的方法,以满足自身的需求。
这被称为方法重写。
在方法重写中,子类可以实现与父类相同的方法名称、参数列表和返回类型,从而覆盖父类的方法。
多态是指同一个方法调用可以具有不同的实现方式。
通过方法重写,子类可以以不同的方式实现继承自父类的方法。
当我们通过一个父类类型的变量引用一个子类对象时,可以根据实际运行时的子类类型来决定调用哪个方法。
面向对象程序设计实验指导书(适用:电子信息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)删除中间的节点,再顺序输出学生信息。
继承在软件工程中,继承是一种面向对象编程的概念,它允许一个类继承另一个类的属性和方法。
通过继承,可以创建一个新的类,该新类具有已有类的特性,并且可以添加自己的特性。
继承是面向对象编程中实现代码重用和抽象概念的重要机制之一。
继承的基本概念在面向对象编程中,我们将现实世界中的事物抽象成为类。
一个类包含了数据(属性)和行为(方法)。
当我们需要创建一个新的类时,可以使用继承来从已有的类派生出新的子类。
在继承关系中,有两个主要角色:•父类(基类/超类):已经存在并被其他类继承的类。
•子类(派生类/衍生类):从父类继承而来,并可以添加自己独特特性的新建立起来的子级。
子类可以获得父类所拥有的属性和方法,并且还可以添加自己独特的属性和方法。
这使得代码重用变得更加容易,并且能够以更高层次进行抽象。
继承关系在软件工程中,继承关系表示为一个父类和一个或多个子类之间的关系。
继承关系使用箭头指向父类,表示子类继承自父类。
例如,我们有一个Animal类作为父类,它具有共同的特性和行为。
然后我们可以创建多个子类,如Dog、Cat、Bird等。
这些子类可以继承Animal类的属性和方法,并且还可以添加自己独特的属性和方法。
下面是一个简单的示例代码:class Animal:def __init__(self, name): = namedef speak(self):print("I am an animal.")class Dog(Animal):def __init__(self, name, breed):super().__init__(name)self.breed = breeddef speak(self):print("Woof!")class Cat(Animal):def __init__(self, name, color):super().__init__(name)self.color = colordef speak(self):print("Meow!")在上面的代码中,Animal是父类,它有一个名为speak()的方法。
实验一 C++基础1.1 实验目的1.了解并熟悉开发环境,学会调试程序;2.熟悉C++中简单的标准输入输出函数的使用方法;3.理解const修饰符的作用并学会应用;4.理解内联函数的优缺点并学会其使用场合;5.理解并学会函数重载;6.理解并熟练掌握使用new和delete来分配内存;7.理解并熟练掌握引用的使用方法。
1.2 实验内容1.2.1 程序阅读1.理解下面的程序并运行,然后回答问题。
#include <iostream.h>int max_def(int x, int y){return (x>y?x:y);}int max_def(int x, int y, int z){int temp = 0;return (temp=(x>y?x:y))>z?temp:z;}double max_def(double x, double y){return (x>y?x:y);}int main()int x1 = 0;int x2 = 0;double d1 = 0.0;double d2 = 0.0;x1 = max_def(5,6);x2 = max_def(2,3,4);d1 = max_def(2.1,5.6);d2 =max_def(12.3,3.4,7.8);-----------------------------------------------------①cout<<"x1="<<x1<<endl;cout<<"x2="<<x2<<endl;cout<<"d1="<<d1<<endl;cout<<"d2="<<d2<<endl;--------------------------------------------------------②return 1;}问题一:上述程序的输出结果是什么?问题二:用的是哪个函数?答:调用的函数是int max_def(int x, int y, int z){int temp = 0;return (temp=(x>y?x:y))>z?temp:z;}问题三:②处的输出结果为什么是d2=12,而不是d2=12.3?答:因为①处调用的是整型函数,d2在此函数中被转换为整型,小数点后面被删除。
内蒙古科技大学面向对象的程序设计实验8-继承(一)内蒙古科技大学面向对象的程序设计实验报告课程名称:面向对象的程序设计姓名:陈伟光实验名称:继承(一)学号:1567159118任课教师:刘月峰专业:软件工程指导教师:刘月峰班级:15-软件一班一、实验目的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++面向对象程序设计。