C++实验3:继承与派生
c 继承与派生实验报告
c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。
掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。
总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。
在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。
C 继承与派生实验报告
C 继承与派生实验报告C 继承与派生实验报告引言:在面向对象的编程中,继承与派生是重要的概念。
通过继承,我们可以从已有的类中派生出新的类,并且可以在新的类中添加额外的属性和方法。
本实验旨在通过实际的编程实践,深入理解C语言中的继承与派生。
实验过程:首先,我们创建了一个基类Animal,其中包含了一个成员变量name和一个成员函数eat。
然后,我们创建了两个派生类Dog和Cat,它们分别继承了Animal类,并且在其中添加了各自特有的成员函数bark和meow。
接着,我们创建了一个对象dog和一个对象cat,并分别调用了它们的成员函数eat、bark 和meow。
实验结果:通过运行程序,我们可以看到dog对象调用了eat和bark函数,而cat对象调用了eat和meow函数。
这说明继承与派生的机制正常工作,派生类可以继承基类的属性和方法,并且可以在派生类中添加新的属性和方法。
实验分析:继承与派生是面向对象编程的重要概念,它可以使得代码的复用性更高,同时也增加了代码的灵活性。
通过继承,派生类可以继承基类的属性和方法,这样可以减少代码的冗余,并且可以在派生类中添加新的功能。
在本实验中,Dog 和Cat类分别继承了Animal类,这样它们就拥有了相同的属性name和方法eat。
然后,通过在派生类中添加新的方法bark和meow,我们可以实现不同的行为。
继承与派生的应用:继承与派生在实际的软件开发中有着广泛的应用。
例如,在一个图形界面程序中,可以定义一个基类Widget,它包含了一些基本的属性和方法,然后可以通过派生类Button和TextBox来创建具体的按钮和文本框。
这样,我们可以通过继承和派生的方式,实现不同的界面元素,并且可以在派生类中添加新的功能,如按钮的点击事件和文本框的输入验证。
继承与派生的注意事项:在使用继承与派生的过程中,我们需要注意一些问题。
首先,派生类可以访问基类的公有成员,但不能访问基类的私有成员。
实验三:继承和派生
实验三继承与派生1.实验目的(1)熟练掌握类的继承,能够定义和使用类的继承关系。
(2)掌握派生类的声明和实现方法。
(3)掌握类构造函数的初始化列表与作用域分辨符的使用方法。
(4)理解虚基类在解决二义性问题中的作用。
2.实验内容(1)定义Staff(员工)类,有Staff分别派生出Saleman(销售员)类和Manager (经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。
要求:a.在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。
在Saleman类中还包含数据成员:销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员:经理提成比例(totalDeductRate)和总销售额(totalAmount)。
在SaleManager类中不包含其他数据成员。
b.各类人员的实发工资公式如下:员工实发工资=基本工资+奖金+出勤率销售员实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例经理实发工资=基本工资+奖金+出勤率+总销售额*经理提成比例销售经理实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例+总销售额*经理提成比例c.每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputW age)。
3.实验步骤(1)实验源程序//程序功能:熟悉类的继承与派生的基本应用#include<iostream>using namespace std;class Staff //定义员工类{protected:char name[20];float rateOfAttend;int num;int basicSal;int prize;int salary;public:Staff(int nu, char na[], float rate, int bac, int pe){num = nu;strcpy(name, na);rateOfAttend = rate;basicSal = bac;prize = pe;}void Output() const{cout << "员工的基本信息:\n";cout << "编号姓名出勤率基本工资奖金\n";cout << num << " "<< name << " "<< rateOfAttend << " "<< basicSal << " "<< prize << endl;}int OutputW age(float rate, int bac, int pe){salary = bac + pe * rate;return (salary);}};class Saleman:virtual public Staff //继承得到销售员类Saleman{protected:float deductRate;int personAmount;int lsalary;public:Saleman(int nu, char na[], float rate, int bac, int pe, int ded, int person):Staff(nu, na, rate, bac, pe){deductRate = ded;personAmount = person;}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person){lsalary = Staff:: OutputW age( rate, bac, pe) + ded * person;return (lsalary);}};class Manager:virtual public Staff //继承得到经理类Manager {protected:float totalDeductRate;int totalAmount;int rsalary;public:Manager(int nu, char na[], float rate, int bac, int pe, float totalr, int totala):Staff(nu, na, rate, bac, pe){totalDeductRate = totalr;totalAmount = totala;}void Output() const{Staff::Output();cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float totalr, int totala){rsalary = Staff:: OutputW age( rate, bac, pe) + totalr * totala;return(rsalary );}};class SaleManager:virtual public Saleman,virtual public Manager //有多重继承得到销售经理类{protected:int lrsalary;public:SaleManager(int nu, char na[], float rate, int bac, int pe, float ded, int person, float totalr, int totala):Staff(nu, na, rate, bac, pe),Saleman(nu, na, rate, bac, pe, ded, person),Manager(nu, na, rate, bac, pe, totalr, totala){}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person, float totalr, int totala){lrsalary = Staff:: OutputWage( rate, bac, pe) + ded * person + totalr * totala;return( lrsalary);}};void main(){Saleman objsale(101101, "LD", 0.88f, 1200, 800, 0.05f, 10000);Manager objmana(101102, "NXG", 0.90f, 2500, 1000, 0.10f, 20000);SaleManager objsalemana(101103, "HDY", 0.99f, 3500, 2000, 0.20f, 100000, 0.20f,150000);objsale.Output();cout << "销售员的实发工资:" << " ";cout << objsale.OutputWage(0.88f, 1200, 800, 0.05f, 10000) << endl;cout << endl;objmana.Output();cout << "经理的实发工资:" << " ";cout << objmana.OutputW age(0.90f, 2500, 1000, 0.10f, 20000) << endl;cout << endl;objsalemana.Output();cout << "销售经理的实发工资:" << " ";cout<<objsalemana.OutputW age(0.99f, 3500, 2000, 0.20f, 10000, 0.20f, 150000) << endl;cout << endl;}(2)编译并运行该程序。
C继承和派生
C继承和派生简单来说:有两个类A和B,A是父类,B是子类。
那么就可以说:A派生出B,B继承与A。
例:父亲“派生” 出儿子儿子“继承” 自父亲派生和继承,本质是相同的,只是从不同角度来描述他们而已。
继承和派生在UML中的表示:注意是空心三角形从子类【派生的类】指向父类【被继承的类】父类,也被称为”基类”除了”构造函数“ 和”析构函数“,父类的所有成员函数,以及数据成员,都会被子类继承!假如已经定义好了父类Father,里面定义好私有数据成员name 和age,和公有的构造函数、成员方法description等。
当子类Son 要继承父类Father时,需要包含”父类的头文件“,定义方式如下:公有继承方式#include "Father.h" // 包含父类的头文件class Son : public Father {// 详细见下面全部代码}假如子类Son要调用自定义的重载构造函数是:1.会先调用父类的构造函数,用来初始化父类继承的数据,2.再掉用自己的构造函数,用来初始化自己定义的数据。
例:Son::Son(const char *name, int age, const char *game) : Father(name, age) {// 没有体现父类的构造函数, 那就会自动调用父类的默认构造函数this->game = game; // 子类自己定义的数据成员}注意一:子类的成员函数,不能访问从父类继承的private成员例:在子类Son中,this->name = name;或者cout << age << endl;都是错误的。
但子类可以访问父类的成员函数,如cout << getName() << getAge() << endl;都是正确的。
注意二:子类对象调用方法时,现在自己定义的方法中去寻找,如果有,就调用自己定义的方法;如果找不到,就到父类的方法中去找,如果有,就调用父类的这个同名方法;如果在父类中找不到,就发生错误!例:父类和子类都定义了description方法,子类Son去调用这个方法,会优先在自己的方法里去找来调用,如果没有,再去父类里找;也没有的话就报错。
C++实验三继承和派生类(附答案)
实验三继承和派生类实验目的和要求1.理解类的继承的概念,能够定义和使用类的继承关系。
2.掌握派生类的声明与定义方法。
3.熟悉公有派生和私有派生的访问特性。
4.学习虚基类在解决二义性问题中的作用。
实验内容1.先阅读下面的程序,分析程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。
(1)#include<iostream.h>class A{public:A(){cout<<"A::A() called.\n";}~A(){cout<<"A::~A() called.\n";}};class B:public A{public:B(int i){cout<<"B::B() called.\n";buf=new char[i];}~B(){delete []buf;cout<<"B:~B() called.\n";}private:char *buf;};void main(){B b(10);}(2)#include<iostream.h>class A{public:A(int a,int b):x(a),y(b){cout<<"A constructor..."<<endl;}void Add(int a,int b){x+=a;y+=b;}void display(){cout<<"("<<x<<","<<y<<")"<<endl;}~A(){cout<<"destructor A..."<<endl;}private:int x,y;};class B:private A{private:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d),Aobj(1,1) {cout<<"B constructor..."<<endl;}void Add(int x1,int y1,int x2,int y2){A::Add(x1,y1);i+=x2;j+=y2;}void display()A::display();Aobj.display();cout<<"("<<i<<","<<j<<")"<<endl;}~B(){cout<<"destructor B..."<<endl;}};void main(){B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();}(3)#include<iostream.h>class A{public:A(int a):x(a){cout<<"A constructor..."<<x<<endl;}int f(){return ++x;}~A(){cout<<"destructor A..."<<endl;}private:int x;};class B:public virtual A{private:int y;A Aobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c)cout<<"B constructor..."<<y<<endl;}int f(){A::f();Aobj.f();return ++y;}void display(){cout<<A::f()<<'\t'<<Aobj.f()<<'\t'<<f()<<endl;}~B(){cout<<"destructor B..."<<endl;}};class C:public B{public:C(int a,int b,int c):B(a,b,c),A(0){cout<<"C constructor..."<<endl;}};class D:public C,virtual public A{public:D(int a,int b,int c):C(a,b,c),A(c){cout<<"D constructor..."<<endl;}~D(){cout<<"destructor D..."<<endl;}};void main(){D d(7,8,9);d.f();d.display();}#include<iostream.h>class Base1{public:Base1(){cout<<"class Base1!"<<endl;}};class Base2{public:Base2(){cout<<"class Base2!"<<endl;}};class Level1:public Base2,virtual public Base1 {public:Level1(){cout<<"class Level1!"<<endl;}};class Level2:public Base2,virtual public Base1 {public:Level2(){cout<<"class Level2!"<<endl;}};class TopLevel:public Level1,virtual public Level2 {public:TopLevel(){cout<<"class TopLevel!"<<endl;}};void main(){TopLevel obj;}2.调试下列程序,并对程序进行修改后再调试,指出调试中的出错原因。
c++类的继承与派生--实验报告
cout<<"输出第"<<i+1<<"位教师的信息:\n";
teac[i].display2();
}
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
}
cout<<"请问你是否继续重新返回操作?(y/n)\n";
cin>>d;
if(d=='n'||d=='N')break;
char a,d;
int b;
int c;
student stud[max];
teacher teac[max];
while(1)
{
cout<<"请问你是否需要输入学生信息?(y/n)\n";
cin>>a;
if(a=='y'||a=='Y')
{
cout<<"请问你要输入几个学生的信息(n不大于1000人)";
cin>>b;
for(int i=0;i<b;i++)
{
cout<<"请输入第"<<i+1<<"的信息\n";
stud[t<<"请问你是否需要输入教师信息?(y/n)\n";
cin>>a;
if(a=='y'||a=='Y')
{
cout<<"请问你要输入几个(n)教师的信息(n不大于1000人)";
继承与派生实验报告
继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。
本文将通过实验来探讨继承与派生的概念、原理和应用。
实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。
实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。
2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。
在子类中,我们可以重写父类的方法或添加新的方法。
3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。
4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。
实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。
在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。
在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。
而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。
通过实验,我们发现继承与派生的优势在于代码的复用和扩展。
我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。
同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。
讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。
总结-----c 之继承和派生
继承和派生一.继承(inheritance):在一个已存在的类的基础上建立一个新的类。
在c++中可重用性是通过继承这一机制实现的。
派生(derived):在已有类的基础上新增自己的特性而产生新类的过程。
共享基类的成员。
派生类不会继承基类的友元关系。
派生类同时也是一个组合:创建一个新类,类中的一个或者多个对象是其他类的成员。
被继承的类称为基类(base class),派生出的类称为派生类(derived class)。
一个派生类可以从一个基类派生,称之为单继承。
也可以从多个基类派生,称之为多继承。
派生过程基类不会作出改变。
派生类则除了继承基类所有可引用的成员外,还可以另外定义新的成员。
继承首先是代码重用的一种机制,但另一个重要的特性在于:继承描述了一组类,这组类在一个相关联的层次上,一个类可以看作是另一个类。
二.继承的目的:实现代码重用。
通过继承机制,可以利用已有的数据类型来定义新的数据类型。
派生的目的:当新的问题出现,原有程序无法解决时,对原有程序进行改造。
三.派生类的声明Class 派生类名:继承方式基类名{派生类新增加的成员声明;}派生类一部分是从基类继承的成员,一部分是在声明派生类时新增加的部分。
四.派生生成过程。
1.吸收基类成员:吸收除构造函数和析构函数外的数据。
2.改造基类成员:声明一个和基类成员同名的新成员,派生类中的新成员就屏蔽了基类同名成员称之为同名覆盖。
这里的屏蔽或者覆盖并不是真正意义上的覆盖,依然可以通过基类名加作用域操作符(::)进行访问。
3.发展新成员:派生类新增加的成员。
新增加的成员需与基类成员不同命。
4.重写构造函数和析构函数:被重新定义的基类函数是虚函数,则称派生类中同名函数为重写。
派生类不会继承基类的构造函数和析构函数。
五.继承方式:继承方式不同影响派生类成员对基类成员访问权限。
1.Pubulic access(公有继承):派生类继承基类的public和protected 且访问属性不变。
继承与派生C++实验
继承与派生一、实验目的1.理解继承与派生、单继承与多继承的概念;2.理解基类与派生类的定义及使用方法,派生类对象及初始化方法;3.理解继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念。
二、实验环境一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。
三、实验内容1、由在校人员类(Person)作为基类派生出学生类(Student)和教师类:在校人员类有成员数据:编号(ID)、姓名(name)、性别(sex)、年龄(age),要求有如下成员函数:构造函数、获取编号的函数和输出所有成员的函数。
把在校人员类作为基类,通过公有继承,派生学生类,派生类新增成员数据有数学(math)、物理(physical)、英语(english)和C++程序设计(cpp)四门课程以及总成绩(total);新增成员函数有构造函数和输出所有成员的函>>回答的内容1.#include<iostream>#include<string>using namespace std;class Person{long id;string name;string sex;int age;public:Person(int ID,string Name,string Sex,int Age) {id=ID;name=Name;sex=Sex;age=Age;}long show_id(){return id;void show(){cout<<"编号:"<<id<<"姓名:"<<name<<"性别:"<<sex<<"年龄:"<<age<<endl;}};class Student : public Person{float math,physical,english,cpp,total;public:Student(long id,string name,string sex,int age,float Math,float Physical,float English,float Cpp):Person(id,name,sex,age){math=Math;physical=Physical;english=English;cpp=Cpp;}void show_all(){total=math+physical+english+cpp;cout<<"数学:"<<math<<"物理:"<<physical<<"英语:"<<english<<"C++程序设计:"<<cpp<<"总成绩:"<<total<<endl;}};class Teacher:public Person{int t_class;string course;string add;public:Teacher(long id,string name,string sex,int age,int T_class,string Course,string Add):Person(id,name,sex,age){t_class=T_class;course=Course;add=Add;}void show_all()cout<<"班级:"<<t_class<<"课程:"<<course<<"办公室:"<<add<<endl;}};void main(){Person z1(2011415101,"aaa","男",50);Student z2(2011415102,"bbb","男",40,90,90,90,90);Teacher z3(2011415103,"ccc","男",30,1,"c++","F608");z1.show();z2.show();z2.show_all();z3.show();z3.show_all();}2.//由在校人员类(Person)作为基类派生出学生类(Student)和教师类://在校人员类有成员数据:编号(ID)、姓名(name)、性别(sex)、年龄(age),要求有如下成员函数:构造函数、获取编号的函数和输出所有成员的函数。
实验报告3:派生与继承
(二 〇 一 五 年 十 一 月《面向对象程序设计》实验报告学校代码: 10128 学 号: 201220905060题 目:派生与继承 学生姓名:燕飞 学 院:理学院系 别:数学系 专 业:信息与计算科学 班 级:信计12-2 任课教师:侯睿一、实验目的1、学习声明和使用类的继承关系,声明派生类;2、熟悉不同继承方式下对基类成员的访问控制;3、学习利用虚基类解决二义性问题。
二、实验内容1、声明一个基类Animal,有私有整形成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?变成试试看。
2、声明一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
3、声明一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。
从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?编程试试看。
三、实验程序1、#include <iostream>using namespace std;class Animal{public:int age;public:Animal(){};~Animal(){ };};class Dog:public Animal{public:Dog(){ };~Dog(){ };void SetAge(int n){age=n;}};int main() {Dog dog;dog.SetAge(10);cout<<"ok"<<endl;return 0;}2、#include<iostream>using namespace std;class BaseClass{private:public:BaseClass(){cout<<"BaseClass Construction!"<<endl;}~BaseClass(){cout<<"BaseClass Deconstruction!"<<endl;}};class DerivedClass:public BaseClass{public:DerivedClass( ){cout<<"Derivedlass Construction!"<<endl;}~DerivedClass( ){cout<<"DerivedClass Deconstruction!"<<endl;}};int main(){DerivedClass d;return 0;}3、#include<iostream>using namespace std;class vehicle {protected:float MaxSpeed;float weight;public:~vehicle(){}vehicle(float m,float w):MaxSpeed(m),weight(w){} virtual void Run (){cout<<"车已经启动啦!!!"<<endl<<endl;}virtual void Stop (){cout<<"vehicle已经停啦!!!"<<endl;};class bicycle: virtual public vehicle {protected:float Height;public:~bicycle(){}bicycle(float m,float w,float h):vehicle( m,w),Height(h){}void Run (){cout<<"The height of bicycle is:"<<Height<<endl<<endl;}void Stop (){cout<<"bicycle已经停啦!!!"<<endl;}};class motorcar: virtual public vehicle {protected:int SeatNum;public:~motorcar(){}motorcar(float m,float w,float s):vehicle( m,w),SeatNum(s){}void Run (){cout<<"The number of motorcar's seat is:"<<SeatNum<<endl<<endl;}void Stop (){cout<<"motorcar已经停啦!!!"<<endl;}};class motorcycle: public bicycle, public motorcar{public:~motorcycle(){}motorcycle(float m,float w,float h,float s):vehicle( m,w),bicycle( m,w,h), motorcar(m,w,s){} void Run (){cout<<"MaxSpeed:"<<MaxSpeed<<endl;cout<<"weight:"<<weight<<endl;cout<<"The height is:"<<Height<<endl;cout<<"The number of seat is:"<<SeatNum<<endl;}void Stop ()cout<<"motorcycle已经停啦!!!"<<endl;}};int main(){vehicle a(108,53);bicycle b(180,50,2);motorcar c(180,80,5);motorcycle d(120,90,1.2,3);vehicle *p[4]={&a,&b,&c,&d };for(int i=0;i<4;i++){p[i]->Stop();p[i]->Run();}return 0;}四、实验结果1、2、3、五、实验总结学习了声明和使用了类的继承关系,声明派生类,熟悉不同继承方式下对基类成员的访问控制,学习利用虚基类解决二义性问题。
c继承与派生
• 不可访问成员
– 在类外不能被直接访问。 – 在派生类的类内不能被直接访问。
2019/1/25 11
举例:公有派生
class Base{ class Derived : public Base{ int v1; int v3; public: public: int v2; int v4; Base(int a=0,int b=0){ Derived(int a=0,int b=0){ v1=a;v2=b; v3=a;v4=b; } } }; void func(){ void main( ){ int sum1=v1+v2+v3+v4; //错误 Derived obj(5,6); int sum2=v2+v3+v4; obj.v2=8; } }; }
• 构造函数的调用顺序如下:
– 先调用基类构造函数; – 再调用对象成员所属类的构造函数; – 最后调用派生类构造函数;
• 析构函数的调用顺序如下:
– 先调用派生类的析构函数; – 再调用对象成员所属类的析构函数;
2019/1/25
– 最后调用基类的析构函数;
26
举例
class Base{ public: Base() { cout<<“Base created\n”;} }; class Derived:public Base{ public: Derived(){ cout<<“Derived created\n”; } }; void main(){ Derived d; } 2019/1/25
•
此时基类的数据成员x的值为多少?
2019/1/25 28
赋值兼容规则
• 在公有派生方式下,派生类对象可以作为 基类对象来使用,具体方式如下:
C++实验三 派生类与继承
实验三派生类与继承班级:123班姓名:朱广金学号:122536一、实验目的1、学习类的继承,能够定义和使用类的继承关系。
2、学习派生类的声明与定义方法。
3、掌握类的定义和对象的声明。
4、熟悉公有派生和私有派生的访问特性。
5、掌握派生类构造函数和析构函数的执行顺序。
6、掌握利用访问声明调整基类成员在派生类中的访问属性。
*****************************************************//**************************************************************************二、试验内容1、下面的程序可以输出ASCII字符与所对应的数字的对照表。
修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。
***************************************************************************#include<iostream>/****************iomanip的作用:*主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。
它是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常见的控制函数的:*dec 置基数为10 相当于"%d"*hex 置基数为16 相当于"%X"*oct 置基数为8 相当于"%o"*setfill( 'c' ) 设填充字符为c*setprecision( n ) 设显示有效数字为n位*setw( n ) 设域宽为n个字符*这个控制符的意思是保证输出宽度为n。
************************************#include <iomanip>using namespace std;//基类class table{public://构造函数table(char p,char q){i=p;j=q;}void ascii(void);protected:char i;char j;};///////////////////////////////////////////////////////void table::ascii(void){int k=1;for (;i<=j;i++){cout<<setw(4)<<i<<(int)i;if((k)%12==0) //每12个换行cout<<"\n";k++;}cout<<"\n";}//派生类class der_table:public table{public:der_table(char p,char q,char *m):table(p,q)//派生类的构造函数{c=m;}void print(void);protected:char *c;};//////////////////////////////////////////////////////////void der_table::print(void){cout<<c<<"\n";table::ascii();}//主函数int main(){der_table obl('a','z',"ASCII value---char");obl.print();return 0;/*****************************************提示:修改后的主程序为:int main(){der_table ob('a','z',"ASCII value---char");ob.print();return 0;}*******************************************//*********************************************************************2、已有类Time和Date,要求设计一个派生类Birthtime,*它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,*同事设计主程序显示一个小孩的出生时间和名字。
C 继承与派生实验报告
C 继承与派生实验报告1. 引言继承与派生是面向对象编程中的基本概念之一,C语言作为一门面向过程的编程语言,也支持继承与派生的概念。
本实验旨在通过编写代码演示C语言中的继承与派生的使用方法,加深对这一概念的理解。
2. 继承与派生的概念继承是一种面向对象编程中的重要概念,通过继承,派生类可以继承基类的属性和方法。
在C语言中,继承是通过结构体嵌套的方式实现的。
派生是继承的一种特殊形式,通过派生,派生类可以在基类的基础上增加新的属性和方法。
3. 实验步骤步骤一:定义基类首先,我们需要定义一个基类,基类包含一些公共的属性和方法。
在C语言中,我们可以使用结构体来定义类。
typedef struct {int x;int y;} Point;上述代码定义了一个名为Point的结构体,它包含了两个整型属性x和y。
这个结构体可以看作是基类。
步骤二:定义派生类接下来,我们可以定义派生类,派生类通过嵌套包含基类的结构体来实现继承。
typedef struct {Point base; // 基类结构体int z; // 派生类自己的属性} Point3D;上述代码定义了一个名为Point3D的结构体,它嵌套包含了基类Point的结构体,并新增了一个整型属性z。
这个结构体可以看作是派生类。
步骤三:使用派生类在定义好派生类后,我们可以使用派生类来创建对象,并调用基类的属性和方法。
int main() {// 创建对象Point3D point3d;point3d.base.x = 1;point3d.base.y = 2;point3d.z = 3;// 调用基类属性printf("x: %d\n", point3d.base.x);printf("y: %d\n", point3d.base.y);// 调用派生类自己的属性printf("z: %d\n", point3d.z);return0;}上述代码示例了如何使用派生类创建对象,并访问基类的属性和派生类自己的属性。
实验三 继承和类的派生
实验三类的派生与继承实验目的和要求1 掌握继承和派生类的概念。
2 掌握派生类对基类的继承。
3 了解多继承。
实验内容1. 编写一个程序,其中有一个书类book,其数据包括书号、书名、定价、出版社及出版时间:有一个作者类author,其数据成员包括姓名、年龄和写作时间,每个类都有相应的输入输出。
以此两个为基类派生出图书查询卡card,并增加一个数据成员表示书籍系统名称,以及一个可以显示系统名称、书名、作者、作者年龄、出版时间、出版社和定价等数据的函数。
2. 设计一个大学的类系统,学校中有学生、教师,每种人员都有自己的特性,他们之间有相同的地方(以 person 类为基类,有姓名、编号),又有各自不同的特性(学生:专业、平均成绩;教师:职称、工资)。
利用继承机制定义这个系统中的各个类,要求输入姓名等信息后再将这些信息输出。
实验原理:1、继承与派生的概念及目的;2、派生类大的声明方式、构成以及访问属性;3、多继承的声明方法;4、含有子对象的派生类的声明方式以及执行顺序;实验内容一:编程思想:编程过程中考虑到过程较为复杂,我采用了分步、分块编程的方法,使得程序的功能逐步地实现。
程序的基本框架如下:第一步:因为考虑到book和author中都需要输入和时间有关的变量,所以将时间作为它们共同的基类,向它们传递时间变量的属性。
Time类是一个比较基本的类的建立,在第一章中已经可以较为熟练地掌握。
第二步:实现书籍基本信息的输入和输出。
此步中用到了继承,因为此类中需要建立出版时间,所以建立了一个Time类的对象:bpubt。
在Book类中设计数据的输入输出函数,并在输入输出函数中通过对象bpubt调用时间类的输入输出函数。
编程过程中,Book类的功能通过以下代码实现,并检查运行结果无误。
#include<iostream>#include<stdlib.h>#include<string>using namespace std;class Time{private:int day;int month;int year;public:Time(int d=0,int m=0,int y=0){ day=d;month=m;year=y;}void setin(){cout<<"请输入时间:"<<endl; cin>>day>>month>>year;}void setout(){cout<<day<<"/"<<month<<"/"<<year<<en dl;}};class book:public Time{private:float bp;int bnum;string bname;string bpubl;Time bpubt;public:void setin() {cout<<"请输入书的简单情况:"<<endl;cin>>bnum>>bname>>bp>>bpubl; bpubt.setin();}void setout(){cout<<bnum<<endl;cout<<bname<<endl;cout<<bp<<endl;cout<<bpubl<<endl;bpubt.setout();}};int main(){book book1;book1.setin();book1.setout();system("PAUSE");return 0;}运行结果:在编写过程中遇到字符串的输入问题,通过调用头文件#include<string.h>得以解决。
c课程设计继承与派生
c 课程设计继承与派生一、教学目标本章节的教学目标是让学生掌握C语言中继承与派生的概念,理解并能够运用继承与派生编写C++程序。
具体目标如下:1.知识目标:理解继承与派生的概念及其在C++程序设计中的应用。
掌握继承与派生的基本语法和用法。
2.技能目标:能够运用继承与派生编写C++程序,解决实际问题。
能够分析并修改现有程序中的继承与派生相关问题。
3.情感态度价值观目标:培养学生的编程思维,提高学生对C++程序设计的兴趣。
培养学生的团队协作能力,鼓励学生在课堂上积极互动、交流。
二、教学内容本章节的教学内容主要包括以下部分:1.继承与派生的概念及其作用。
2.继承与派生的基本语法和用法。
3.继承与派生在实际编程中的应用案例。
具体的教学大纲如下:1.第一课时:介绍继承与派生的概念及其作用。
2.第二课时:讲解继承与派生的基本语法和用法。
3.第三课时:通过案例分析,让学生掌握继承与派生在实际编程中的应用。
三、教学方法为了提高教学效果,本章节将采用以下教学方法:1.讲授法:讲解继承与派生的概念、语法和用法。
2.案例分析法:分析实际编程中继承与派生的应用,让学生更好地理解知识点。
3.实验法:让学生动手编写代码,巩固所学知识,提高实际编程能力。
四、教学资源为了支持本章节的教学,我们将准备以下教学资源:1.教材:《C++程序设计》等相关教材。
2.参考书:提供一些关于继承与派生的相关论文和书籍,供学生自主学习。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解知识点。
4.实验设备:提供计算机实验室,让学生能够动手编写代码,进行实验。
五、教学评估为了全面、客观地评估学生在学习C课程中继承与派生章节的学习成果,我们将采取以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和理解程度。
2.作业:布置与继承与派生相关的编程作业,评估学生对知识点的掌握和运用能力。
3.考试:安排一次期中考试,测试学生对继承与派生知识点的理解和运用能力。
[C++]继承和派生实验报告
运行结果:修改过后的程序代码如下:#include <iostream>#include <cstring>using namespace std;class Person{private: char m_strName[20];int m_nAge;int m_nSex;public: Person();//构造函数Person( char *name, int age, char sex ); //构造函数Person( const Person &p ); //拷贝构造函数~Person() //析构函数{cout<<"Now destroying the instance of Person"<<endl;}void SetName( char *name );void SetAge( int age );void setSex( char sex );char* GetName();运行结果:2. 程序的类结构图为:A-x:int+A()+A( int m ) : x( m )+~A()B-A a-y:int+B()+B( int m, int n, int l ) : A( m ), a( n ),y( l )+~B()运行结果:3.程序的类结构图为:Person#m_name[20]:char#m_age:int#m_sex:char+Person()+information(char* name,int age,char sex):void+~Person()Teacher#major[20]: char#position[20]: char#course[20]: char+m_major(char* m): void+m_position(char* p):void+m_course(char* c): voidcout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果:。
C++类的继承与派生 实验报告
Guangxi University of Science and Technology实验报告实验课程: C++程序设计教程实验内容:类的继承与派生院(系):专业:班级:学生姓名:学号:指导教师:2013年 11 月 11日一.实验目的:1、掌握利用单继承和多继承的方式定义派生类的方法。
2、深刻理解在各种继承方式下构造函数和析构函数的执行顺序。
3、理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制。
4、理解虚基类的目的和作用。
二.实验内容(-)实验题目一:声明一个圆类作为基类,含成员数据半径R;有成员函数:构造函数实现对基类成员数据的初始化、计算圆面积的成员函数、输出的成员函数,要求输出圆半径R。
把圆类作为基类,通过公有继承,派生圆柱体类,派生类新增成员数据有高(H);新增成员函数有构造函数、计算圆柱体体积的函数、输出所有成员的函数。
main()完成派生类对象的定义和相关函数的测试。
2.程序源代码:#include<iostream>using namespace std;class round{public:round(float m){rad=m;}float space(){sp=3.14*rad*rad;return sp;}void display(){cout<<"the round of information"<<endl;cout<<"该圆半径: "<<rad<<endl;cout<<"该圆面积: "<<space()<<endl;}protected:float rad;float sp;};class cylinder: public round{public:cylinder(float m,float n):round(m){high=n;}void gethigh(float n){high=n;}float room(){bulk=3.14*rad*rad*high;return bulk;}void play(){cout<<"the cylinder of information:"<<endl;cout<<"该圆柱高: "<<high<<endl;cout<<"该圆柱体积: "<<room()<<endl;}protected:float high;float bulk;};int main(){float m,n;cout<<"输入该圆半径:"; cin>>m;cout<<"输入该圆柱高:";cin>>n;cylinder ss(m,n);ss.display();ss.play();}3.实验结果:(二)实验题目二:声明一个学生类,有成员函数:学号、姓名、性别、年龄,要求有如下成员函数:构造函数,输出所有成员的函数。
C++实验报告--继承和派生
}
void show(){
Person::show();
cout<<"Teacher lesson:"<<lesson<<endl;
}
};
class Student:virtual public Person{
private:
{
cout<<"constructing...."<<endl;
}
void show(){
cout<<"YJSZJ:"<<endl;
Teacher::show();
Student::show();
}
};
void main(){
YJSZJ x(21,50,98.0,99.0,97.0,5000,02);
}
void show_biaomianji()
{
cout<<"表面积:"<< "2*(A*B+A*H+B*H)= "<<2*(A*B+A*H+B*H)<<" (cm2)"<<endl;;
}
};
void main(){
Point C(6,8),D(3,4);
C.showXY();
D.showXY();
int H;
public:
Cuboid(int H,int A,int B,int X,int Y):Rectangle(A,B,X,Y)
C 继承与派生实验报告
C 继承与派生实验报告C 继承与派生实验报告引言:在计算机编程领域,继承与派生是一种重要的概念。
通过继承,我们可以构建更加复杂和灵活的程序结构,提高代码的可重用性和可维护性。
本实验旨在通过实际操作和分析,深入理解C语言中继承与派生的原理和应用。
实验目的:1. 理解继承与派生的概念和原理;2. 掌握C语言中继承与派生的语法和用法;3. 实践继承与派生的应用,加深对其理解。
实验步骤:1. 创建基类和派生类:首先,我们创建一个基类Animal,其中包含一个成员函数eat()和一个成员变量name。
然后,我们创建一个派生类Dog,继承自基类Animal,并添加一个成员函数bark()和一个成员变量breed。
2. 实现继承与派生的功能:在基类Animal中,实现成员函数eat(),用于输出动物的进食行为。
在派生类Dog中,实现成员函数bark(),用于输出狗的吠叫行为。
同时,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。
3. 测试继承与派生的效果:在主函数中,创建一个Dog对象,并调用其成员函数eat()和bark(),以验证继承与派生的功能是否正常工作。
同时,可以通过修改派生类Dog的成员变量breed,观察其对程序运行结果的影响。
实验结果与分析:通过实验,我们可以发现继承与派生的强大功能。
基类Animal提供了一种通用的行为eat(),而派生类Dog则通过添加成员函数bark(),实现了更加具体和特定的行为。
这种继承与派生的关系,使得我们可以在保留原有功能的基础上,进行灵活的扩展和定制。
此外,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。
这种继承的特性,使得派生类可以共享基类的数据,避免了重复定义和冗余代码的问题。
同时,通过修改派生类Dog的成员变量breed,我们可以看到其对程序运行结果的影响。
这种灵活性,使得我们可以根据具体需求,定制不同的派生类,实现更加个性化的功能。
C++程序设计实验 类的继承和派生
《C++程序设计》实验报告准考证号xxxxxx题目:类的继承和派生姓名xxx 日期xxx实验环境:Visual c++6.0实验内容与完成情况实验目的:1,理解继承派生的概念2,掌握派生类的定义,熟练定义派生类及其构造函数、析构函数3,理解继承派生中可能存在的问题实验内容:1,完成基类的定义定义person类,其属性有姓名name、年龄age、性别sex定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showperson函数显示相关信息定义setperson函数存入相关信息2,定义派生类student其属性增加:学号ID、年级grade、班级clas定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showstudent函数显示对象的所有信息定义setstudent函数存入相关信息3,定义派生类teacher其属性增加:工号ID、职务position、部门department定义相关构造函数、析构函数,提供不同的构造函数以不同方式构造对象定义showteacher函数显示对象的所有信息定义setteacher函数存入相关信息4,设计main函数创建对象,测试派生类对象产生时,构造函数调用过程派生类对象释放时,析构函数调用过程并输出结果源程序代码:#include<iostream>#include<string>using namespace std;class person{protected:string name,sex;int age;public:person(string a="未命名",int b=0,string c="未知"){name=a;age=b;sex=c;}void setperson(string a,int b,string c);void showperson();~person(){cout<<"析构"<<name<<endl;}};void person::setperson(string a,int b,string c){name=a;age=b;sex=c;}void person::showperson(){cout<<"姓名:"<<name<<"\t年龄:"<<age<<"\t性别:"<<sex<<endl;}class student:public person{string ID,grade,clas;public:student(string a="未命名",int b=0,string c="未知",string d="0000",string e="未知",string f="未知"):person(a,b,c){ID=d;grade=e;clas=f;}void showstudent();void setstudent(string a,int b,string c,string d,string e,string f);~student(){cout<<"析构"<<name<<endl;}};void student::showstudent(){person::showperson();cout<<"学号:"<<ID<<"\t年级:"<<grade<<"\t班级:"<<clas<<endl;}void student::setstudent(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;grade=e;clas=f;}class teacher:public person{string ID,position,department;public:teacher(string a="未命名",int b=0,string c="未知",string d="无",string e="未知",string f="未知"):person(a,b,c){ID=d;position=e;department=f;}void showteacher();void setteacher(string a,int b,string c,string d,string e,string f);~teacher(){cout<<"析构"<<name<<endl;}};void teacher::showteacher(){person::showperson();cout<<"工号:"<<ID<<"\t职务:"<<position<<"\t部门:"<<department<<endl;}void teacher::setteacher(string a,int b,string c,string d,string e,string f){setperson(a,b,c);ID=d;position=e;department=f;}void main(){person a1("张三",15,"男");a1.showperson();person a2("小三");a2.showperson();person b;string h,j;int i;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;b.setperson(h,i,j);b.showperson();student c1("王五",16,"男","1001","10级","二班");c1.showstudent();student c2("小五",16,"男");c2.showstudent();student d;string k,l,m;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"学号:";cin>>k;cout<<"年级:";cin>>l;cout<<"班级:";cin>>m;d.setstudent(h,i,j,k,l,m);d.showstudent();teacher e1("赵六",33,"男","2002","教授","计算机学院");e1.showteacher();teacher e2("小刘",33,"男");e2.showteacher();teacher f;string n,o,p;cout<<"请输入:"<<endl;cout<<"姓名:";cin>>h;cout<<"年龄:";cin>>i;cout<<"性别:";cin>>j;cout<<"工号:";cin>>n;cout<<"职务:";cin>>o;cout<<"部门:";cin>>p;f.setteacher(h,i,j,n,o,p);f.showteacher();}输出结果:出现的问题:解决方案(列出遇到的问题和解决办法,列出没有解决的问题)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GDOU-B-11-112广东海洋大学学生实验报告书
实验名称实验3:继承与派生课程名称C++程序设计×2 课程号S1*******×2 学院(系) 信息学院专业计算机科学与技术班级
学生姓名???? 学号20101162\ 实验地点科423 实验日期
一.实验目的
理解继承的含义;掌握派生类的定义方法和实现;
1.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类
成员可以访问基类的部分非公开的成员。
二.实验准备
1. 复习继承和派生类的定义和实现方法;
2. 复习不同继承方式下,派生类成员对基类成员的访问方式;
3. 根据实验内容要求,编写好实验程序。
三.实验内容
3.1 填空题.
1. 在一个派生类中,对基类成员、类对象成员和非类对象成员的初始化次序是先___基类成员_____,后__类对象成员______,最后为____非类对象成员____。
2.当撤销一个含有基类和类对象成员的派生类对象时,将首先完成__派生类__自身____的析构函数定义体的执行,接着完成___对象成员____的析构函数定义体的执行,最后完成___基类_____的析构函数定义体的执行。
3.2写出下列每个程序运行后的结果。
(要求读程写出结果,再上机验证)
1. #include<iostream>
using namespace std;
class A{
int a;
public:
A(int aa=0):a(aa){
cout<<"Constructor A!"<<a<<endl;}
};
class B: public A{
int b;
public:
B(int aa, int bb):A(aa),b(bb){
cout<<"Constructor B!"<<b<<endl;}
};
void main(){
B x(2,3),y(4,5);}
结果如下:
Constructor A!2
Constructor B!3
Constructor A!4
Constructor B!5
2. #include<iostream>
using namespace std;
class A{
int a;
public:
A(int aa=0) {a=aa;}
~A() {cout<<"Destructor A!"<<a<<endl; } };
class B: public A{
int b;
public:
B(int aa=0, int bb=0):A(aa) {b=bb;}
~B() {cout<<"Destructor B!"<<b<<endl; } };
void main(){
B x(5),y(6,7);}
结果如下:
Destructor B!7
Destructor A!6
Destructor B!0
Destructor A!5
3. #include<iostream>
using namespace std;
class AX{
int x;
public:
AX(int xx=0): x(xx) {
cout<<"AX constructor."<<endl;}
~AX() {cout<<"AX destructor. "<<endl;}
void Output() {cout<<x<<' ';}
int Get() {return x;}
};
class BX: public AX{
int y;
AX z;
public:
BX(int xx=0, int yy=0): AX(xx),y(yy), z(xx+yy) {
cout<<"BX constructor."<<endl;}
~BX() {cout<<"BX destructor. "<<endl;}
void Output() {
AX::Output(); cout<<Get()<<' ';
cout<<y<<' '<<z.Get()<<endl;}
};
void main(){
BX a(5), b(10,20);
a.Output();
b.Output();}
结果如下:
AX constructor.
AX constructor.
BX constructor.
AX constructor.
AX constructor.
BX constructor.
5 5 0 5
10 10 20 30
BX destructor.
AX destructor.
AX destructor.
BX destructor.
AX destructor.
AX destructor.
3.3程序题。
编写一个程序,要求:
•①定义一个基类点,功能:获得坐标、移动、初始化坐标;
•②定义基类的派生类长方形,除了初始化参数、获得参数功能外,还要计算其面积;
•③定义主函数,给长方形初始化、移动、求面积并输出其参数。
#include<iostream>
using namespace std;
class point
{int x,y;
public:
poin(int a=0,int b=0) {x=a,y=b; cout<<"坐标已初始化为:"<<"("<<x<<","<<y<<")"<<endl;}
void move(int c,int d) {x=x+c,y=y+d; cout<<"坐标已移动至:"<<"("<<x<<","<<y<<")"<<endl;
}
};
class square:public point
{int l,w;
public:
teangle(int k,int n){l=k,w=n;cout<<"长方形的长和宽分别定义为:"<<"("<<l<<","<<w<<")"<<endl;}
area ( ){cout<<"该长方形的面积是:"<<l*w<<endl;}
};
void main ()
{int a,b,e,f,g,h;
point p1;
square s1;
cout<<"请输入坐标的初始值。
"<<endl;
cin>>a>>b;
p1.poin(a,b);
cout<<endl<<"请输入坐标的移动值。
"<<endl;
cin>>e>>f;
p1.move(e,f);
cout<<endl<<"请输入所构成的长方形的长和宽。
"<<endl;
cin>>g>>h;
s1.teangle(g,h);
s1.area ();
}
成绩指导教师日期
注:请用A4纸书写,不够另附纸。
第页,共页。