VC语言程序设计第2次实验_多态和虚函数运算符重载

合集下载

c语言第二次实验报告

c语言第二次实验报告

c语言第二次实验报告摘要:本次实验主要是关于C语言的指针和数组的实验。

通过这次实验,我对C语言的指针和数组有了更深入的理解和应用能力。

一、实验要求:1.编写一个程序,实现对10个整数的输入、输出、求和、求平均数等操作。

2.编写一个程序,实现对10个学生的成绩进行排序并输出。

二、实验过程及结果:1.程序一:对10个整数进行输入、输出、求和、求平均数等操作。

步骤:(1)定义整型数组a[10],用for循环对其进行输入。

(2)定义sum变量并用for循环对数组元素进行求和运算。

(3)定义double类型的avg变量,计算数组元素的平均数。

(4)输出数组元素和平均数。

结果:输入10个整数:1 2 3 4 5 6 7 8 9 1010个数字的和为:5510个数字的平均数为:5.502.程序二:对10名学生的成绩进行排序并输出。

步骤:(1)定义数组grade[10],用for循环进行输入。

(2)用冒泡排序法进行排序。

(3)用for循环进行打印输出操作。

结果:输入10名学生的成绩:99 60 88 72 65 92 78 84 70 95排序后的成绩为:60 65 70 72 78 84 88 92 95 99三、实验总结:通过本次实验,我深刻认识到指针和数组对于C语言程序设计的重要性。

指针和数组是C语言中非常重要的概念,其掌握程度直接影响着程序的设计和效率。

在实验过程中,我充分体会到了C语言指针和数组的使用方法,并加深了其中的应用技巧。

在以后的编程过程中,我会更加熟练的使用指针和数组,努力提高自己的编程能力,为今后的学习和工作打下坚实的基础。

C--程序设计--第10章-多态性及虚函数

C--程序设计--第10章-多态性及虚函数

使用重载函数注意:
不要使用重载函数描述不相干的函数 在类中,构造函数和普通成员函数均可以
重载 避免与函数的默认参数产生二义性
二、运算符重载
运算符重载(operate overloading)就是 赋予已有的运算符多重含义。
运算符重载实质是函数重载,运算符重载 的选择与函数重载类似,会根据运算符的 操作数的类型、个数和顺序来进行运算符 函数的选择。
#include<iostream.h> str#iinngc:l:usdter<isntgr(icnhga.rh>*s) v{}ossccsssc{s{{ittohtttolsstlsssls*drruarrrueptrepttepsi1trii3tc{pn=rin=rrn=pmn.<nn.<lprgncngncign=agp<*ggp<auitepgtepnte'irssrssbv\hwy:hwyghwnsit1ssitsla0=(:=(:=(tnr=ttnrit'scssscs:sc)rt1"rrt3scesss~ivci;thpt1hpsih1(.T23(.t::tttsnohn}ra,r.a,tza()gh(()grrrrttiatlrsilrsrer";eass;eiiiirdre[)ne[1i;[Ttt1ttnnnniglnl;gnl.nlhl)rlggggnep*e(e}(gesgeiei;2e(((gtrsnsnstnp(nsns)ncsi(lipg)gthg)ig(;(htn)en;t;tr;t;nti)a)artnthhih}ths<<ri{((;+n++<p<snd))}1g1s1aere*ige;]]i]nonszl{{;&;z;ddgd)&eercseelrl;s=teo1)m;a;/18etu)om/)0ut..;)构sr<""/;pn<造);//;s;/复}lp函构e<制n<数造ge构tn函hd造;l数};重} 载

运算符重载实验报告

运算符重载实验报告

运算符重载实验报告运算符重载实验报告引言:运算符重载是C++语言中的一项重要特性,它允许用户自定义运算符的行为。

通过运算符重载,可以使得程序更加直观、简洁,并提高代码的可读性和可维护性。

本实验旨在探索运算符重载的用法和效果。

一、实验目的本实验旨在通过实际操作,深入了解运算符重载的机制和使用方法,以及运算符重载对程序设计的影响。

二、实验环境本实验使用C++编程语言,并在Visual Studio开发环境下进行实验。

三、实验过程1. 了解运算符重载的基本概念运算符重载是指通过定义函数,改变运算符的行为。

在C++中,可以通过重载运算符函数来实现运算符的重载。

运算符重载函数的命名规则为"operator 运算符",例如"operator+"表示重载加法运算符。

2. 实现运算符重载的实验示例为了更好地理解运算符重载的使用方法,我们以矩阵的加法为例进行实验。

首先,定义一个Matrix类,并重载"+"运算符。

```cppclass Matrix {private:int** data;int rows;int cols;public:Matrix(int rows, int cols) {this->rows = rows;this->cols = cols;data = new int*[rows];for (int i = 0; i < rows; ++i) {data[i] = new int[cols];}}Matrix operator+(const Matrix& other) {Matrix result(rows, cols);for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {result.data[i][j] = data[i][j] + other.data[i][j]; }}return result;}};```在上述代码中,我们定义了一个Matrix类,其中包含矩阵的数据成员data、行数rows和列数cols。

C++ 实验三 运算符重载及多态与虚函数

C++ 实验三  运算符重载及多态与虚函数

课程实验报告课程名称C++面向对象程序设计班级计算131 实验日期2015/5/21-2015/5/29姓名赵宇涵学号201307012 实验成绩实验名称实验三运算符重载及多态与虚函数实验目的及要求1、理解运算符重载的重要性及好处。

理解静态联编和动态联编,理解多态的概念。

2、理解哪些运算符可以重载而哪些不能重载。

理解虚函数在类的继承层次中的作用及虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。

3、理解单目运算符和双目运算符重载时的特点。

了解虚函数对多态性的支持。

4、熟练掌握一般运算重载的方法。

掌握虚函数和纯虚函数的概念。

5、掌握特殊运算符重载的方法。

理解静态多态性和动态多态性,学习使用虚函数的继承实现动态多态性。

6、了解抽象类的概念。

实验环境VC++6.0/Dev-cpp实验内容1、编写一个时间类Time,包含时、分、秒等数据成员,实现时间的加、减、输入和输出操作。

其中加减通过重载相应运算符来实现。

2、设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,返回t1和t2两个三角形面积之和。

分析提示:在Triangle类中设计一个友元函数operator+(Triangle t1,Triangle t2),它重载运算符“+”,返回t1和t2两个三角形的面积之和。

3、分析程序的错误,分析原因并改正。

4、下面的shape类是一个表示形状的抽象类,area()为求图形面积的函数。

请从shape类派生三角形类(triangle)和圆类(circle),并给出具体的求面积函数。

算法描述及实验步骤1、Timeint hour;int minute;int second;Time(int h=0,int m=0,int s=0):hour(h),minute(m),second(s){}void input();void display();Time operator+(Time t);Time operator-(Time t);2、3、4、Trianglefloat x1;float x2;float x3;float area;Triangle(float a1=0,float a2=0,float a3=0):x1(a1),x2(a2),x3(a3){}float computeArea();friend Triangle operator+(Triangle t1,Triangle t2);void display();Aint x;A(int i){x=i;}virtual void dispa()Bint y;B(int i,int j):A(i){y=j;}void dispa()shapevirtual float area()=0; trianglefloat x1;float x2;float x3;float y;triangle(float a,float b,float c){x1=a;x2=b;x3=c;}float area()circlefloat r;float s;circle(float R){r=R;} float area()调试过程及实验结果1、2、3、4、总结此次试验内容为运算符重载及多态与虚函数。

多态性与虚函数实验报告

多态性与虚函数实验报告

多态性与虚函数实验报告实验目的:通过实验掌握多态性和虚函数的概念及使用方法,理解多态性实现原理和虚函数的应用场景。

实验原理:1.多态性:多态性是指在面向对象编程中,同一种行为或者方法可以具有多种不同形态的能力。

它是面向对象编程的核心特性之一,能够提供更加灵活和可扩展的代码结构。

多态性主要通过继承和接口来实现。

继承是指子类可以重写父类的方法,实现自己的特定行为;接口是一种约束,定义了类应该实现的方法和属性。

2.虚函数:虚函数是在基类中声明的函数,它可以在派生类中被重新定义,以实现多态性。

在类的成员函数前面加上virtual关键字,就可以将它定义为虚函数。

当使用基类指针或引用调用虚函数时,实际调用的是派生类的重写函数。

实验步骤:1. 创建一个基类Shape,包含两个成员变量color和area,并声明一个虚函数printArea(用于打印面积。

2. 创建三个派生类Circle、Rectangle和Triangle,分别继承Shape类,并重写printArea(函数。

3. 在主函数中,通过基类指针分别指向派生类的对象,并调用printArea(函数,观察多态性的效果。

实验结果与分析:在实验中,通过创建Shape类和派生类Circle、Rectangle和Triangle,可以实现对不同形状图形面积的计算和打印。

当使用基类指针调用printArea(函数时,实际调用的是派生类的重写函数,而不是基类的函数。

这就是多态性的实现,通过基类指针或引用,能够调用不同对象的同名函数,实现了对不同对象的统一操作。

通过实验1.提高代码的可扩展性和灵活性:通过多态性,可以将一类具有相似功能的对象统一管理,节省了代码的重复编写和修改成本,增强了代码的可扩展性和灵活性。

2.简化代码结构:通过虚函数,可以将各个派生类的不同行为统一命名为同一个函数,简化了代码结构,提高了代码的可读性和维护性。

3.支持动态绑定:通过运行时的动态绑定,可以根据对象的实际类型来确定调用的函数,实现了动态绑定和多态性。

《C 程序设计实例与操作》课件第10章 多态性、虚函数与运算符重载

《C  程序设计实例与操作》课件第10章 多态性、虚函数与运算符重载

t.imag=imag+c.imag;
return t;
} 则a+b为隐式调用,它等价于a.operator+(b),这是显式调用。
2.单目运算符重载作为类的成员函数
单目运算符重载作为类的成员函数时,操作数为访问该重 载运算符的对象本身的数据,也由this指针指出,因此,单目 运算符重载函数没有参数。
2.赋值运算符的重载
通常情况下,系统会自动生成一个默认的赋值运算符函数, 提供同类对象之间进行赋值的功能。但在某些特殊情况下,必 须要定义一个赋值运算符重载函数。
10.5 实现类型转换
类型转换函数用来将类类型转换为标准数据类型。
operator 类型名() { 转换语句 } 类型转换函数只能作为成员函数,不能作为友元函数,它又 称为类型转换运算符重载函数。
{}
virtual~ Point()
//定义虚析构函数
{}
virtual double CalArea() const=0;
//定义纯虚函数
};
class Rect:public Point {
//定义派生类Rect
protected:
double xcoord1,ycoord1;
public:
双目运算符重载为友元函数时,由于没有this指针,所以 操作数要通过友元函数的参数指出。
例如:
operator+(a,b); a+b;
//显式调用 //隐式调用
4.单目运算符重载作为类的友元函数
与双目运算符重载作为友元函数类似,单目运算符重载作 为友元函数时,操作数要通过友元函数的参数指出。
例如:
operator++(a); ++a;

《C++程序设计教程(第2版)》教学课件—05多态与虚函数

《C++程序设计教程(第2版)》教学课件—05多态与虚函数

class Dog:public Animal{
//狗类Dog公有继承Animal类
public:
virtual void speak();
//声明虚函数speak()
};
void Dog::speak(){
//类外实现虚函数
cout<<"狗的叫声:汪汪"<<endl;
}

5.2.1 虚函数
int main() {
Cat cat; Animal *pA=&cat; pA->speak(); Dog dog; Animal *pB=&dog; pB->speak(); return 0; }
//创建Cat类对象cat //定义Animal类指针pA指向对象cat //通过pA调用speak()函数 //创建Dog类对象dog //定义Animal类指针pB指向对象dog //通过pB调用speak()函数

多学一招:override和final(C++11新标准)
2.final final关键字有两种用法:修饰类、修 饰虚函数。当使用final关键字修饰类 时,表示该类不可以被继承。

多学一招:override和final(C++11新标准)
class Base final { public:

5.2.1 虚函数
//例5-1 polymorphic.cpp
class Animal{
//动物类Animal
public:
virtual void speak();
//声明虚函数speak()
};
void Animal::speak(){

最新版C++程序设计语言(第2次)作业(含答案)

最新版C++程序设计语言(第2次)作业(含答案)

第2次作业一、单项选择题(本大题共50分,共 20 小题,每小题 2.5 分)1. 类A从类B派生而来,下面()可以在类A的构造函数中调用基类B的构造函数A.class A : public B {public: A(int i){B(i)};}B.class A : public B {public: A(int i):B(i){};}C.class A : public B {public: A(int i):B(int i){};}D.class A : public B {public: A(int i){B(int i)};}2. C++的函数有函数头和函数体两部分组成,下面所列的函数头书写格式中不正确的是()。

A. main(int a,int b)B. main(int a,int b=1)C. main(int a=0,int b)D. main(int a=2,int b=3)3. 下列存取控制符中,()能够限定类外代码不能访问被它修饰的成员。

A.privateB.publicC.protectedD.private和protected都可以4. 下列()能够正确地申明友元函数,让函数fun能够访问类A的私有成员。

A.void fun() friend class A;B.Friend class A{private: int i; void fun();};C.class A{private: int i; friend fun();};D.class A{private: int i; friend void fun();};5. 类A的定义代码如下: class A{ public: A(int i){this->i=i;}setI(int i){this->i=i;} private: int i; }; 下列代码中,()能够正确申明类A的常对象,并给i成员赋初值。

多态性和虚函数 实验报告

多态性和虚函数 实验报告

多态性和虚函数实验报告淮海工学院计算机科学系实验报告书课程名:《 C++程序设计(二)》题目:多态性和虚函数班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日 C++程序设计实验报告1、实验内容或题目(1)声明二维坐标类作为基类派生圆的类,把派生类圆作为基类,派生圆柱体类。

其中,基类二维坐标类有成员数据:x、y坐标值;有成员函数:构造函数实现对基类成员数据的初始化、输出的成员函数,要求输出坐标位置。

派生类圆类有新增成员数据:半径(R);有成员函数:构造函数实现对成员数据的初始化、计算圆面积的成员函数、输出半径的成员函数。

派生圆柱体类新增数据有高(H);新增成员函数有:构造函数、计算圆柱体体积的函数和输出所有成员的函数。

请完成程序代码的编写、调试。

(2)教材393页7-8题。

(3)教材416页1、4、5题。

2、实验目的与要求(1)理解继承与派生的概念(2)掌握通过继承派生出一个新的类的方法(3)了解多态性的概念(4)了解虚函数的作用与使用方法3、实验步骤与源程序⑴ 实验步骤先定义一个基类point,及其成员函数,然后以public的继承方式定义子类circle,再定义一个派生类cylinder,最后在main主函数中定义类对象,调用函数实现其功能。

先定义一个基类A及其重载的构造函数,然后以Public派生出子类B,再定义其构造函数,最后在main主函数中定义类对象,调用成员函数实现其功能。

⑵ 源代码1.#include class Point { public:Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;}C++程序设计实验报告float getY() const {return y;}friend ostream & operator<protected: };Point::Point(float a,float b) {x=a;y=b;}void Point::setPoint(float a,float b) {x=a;y=b;}ostream & operator<class Circle:public Point { public:Circle(float x=0,float y=0,float r=0); void setRadius(float); float getRadius() const; float area () const;friend ostream &operator<protected: };Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}float radius;C++程序设计实验报告void Circle::setRadius(float r) {radius=r;}float Circle::getRadius() const {return radius;}float Circle::area() const {return 3.14159*radius*radius;}ostream &operator<cout<class Cylinder:public Circle { public:Cylinder (float x=0,float y=0,float r=0,float h=0); void setHeight(float); float getHeight() const; float area() const; float volume() const;friend ostream& operator<r=\protected: };Cylinder::Cylinder(float a,float b,float r,floath):Circle(a,b,r),height(h){}float height;C++程序设计实验报告void Cylinder::setHeight(float h){height=h;}float Cylinder::getHeight() const {return height;}float Cylinder::area() const{return 2*Circle::area()+2*3.14159*radius*height;}float Cylinder::volume() const {return Circle::area()*height;}ostream &operator<cout<<int main() {Cylinder cy1(3.5,6.4,5.2,10);cout<感谢您的阅读,祝您生活愉快。

运算符重载实验报告

运算符重载实验报告

一、实验目的1. 理解运算符重载的概念和原理。

2. 掌握C++中运算符重载的方法和规则。

3. 通过实例,实现自定义类型对运算符的重载。

4. 分析运算符重载在实际编程中的应用和优势。

二、实验环境1. 编程语言:C++2. 开发环境:Visual Studio 20193. 操作系统:Windows 10三、实验内容1. 运算符重载的概念和原理2. 运算符重载的方法和规则3. 自定义类型运算符重载实例4. 运算符重载的实际应用四、实验步骤1. 概念和原理运算符重载是指为已有的运算符赋予新的功能,使其能够应用于自定义类型的数据。

在C++中,运算符重载可以通过成员函数或友元函数实现。

2. 方法和规则- 成员函数重载:在自定义类型中定义一个成员函数,该函数的名称与要重载的运算符相同。

- 友元函数重载:在自定义类型外部定义一个友元函数,该函数的名称与要重载的运算符相同,并在函数声明中添加类名和作用域解析运算符。

运算符重载规则:- 运算符重载的函数必须返回与操作数相同的类型。

- 运算符重载的函数不能改变原有运算符的操作数个数。

- 运算符重载的函数不能改变原有运算符的优先级。

- 运算符重载的函数不能改变原有运算符的结合性。

3. 自定义类型运算符重载实例假设我们有一个自定义类型`Point`,表示二维平面上的一个点,其坐标为`(x, y)`。

```cppclass Point {public:int x, y;Point(int x, int y) : x(x), y(y) {}// 成员函数重载加法运算符Point operator+(const Point& p) const {return Point(x + p.x, y + p.y);}// 友元函数重载加法运算符friend Point operator-(const Point& p1, const Point& p2);};// 实现友元函数重载减法运算符Point operator-(const Point& p1, const Point& p2) {return Point(p1.x - p2.x, p1.y - p2.y);}```4. 运算符重载的实际应用运算符重载在实际编程中具有以下优势:- 提高代码可读性:使用自定义类型时,可以像操作基本数据类型一样使用运算符,提高代码的可读性。

面向对象程序设计语言C虚函数和多态性

面向对象程序设计语言C虚函数和多态性

第七章 虚函数和多态性
• 7.1 虚函数
静态多态性 对于普通成员函数的重载,可表达为下面的方式: (1)在同一个类中重载; (2)在不同类中重载; (3)基类的成员函数在派生类中重载; 因此,重载函数的访问是在编译时区分的,这种程
序运行之前就能够在多个函数中确定当前访问的 函数的方法称为静态多态性。
请问程序的输出是什么?
第七章 虚函数和多态性
• 7.1 虚函数
虚函数与多态性 程序的输出是:
base 1 base 2 base 3 很奇怪,是吗?明明是指向子类的指针,为什么调 用的却是父类的函数版本呢?
第七章 虚函数和多态性
• 7.1 虚函数
虚函数与多态性 答案很简单,因为通过父类指针来看,该指针所指
面向对象程序设计语言C虚函数和多态性
第七章 虚函数和多态性
C++语言的多态性有两种类型:静态多态性和动态 多态性。前面学习的函数重载和运算符重载就是 静态多态性的具体示例。在程序编译时系统就能 够决定调用哪个函数,因此静态多态性又称为编 译时的多态性。动态多态性时程序运行过程中才 动态的确定操作所针对的对象。它又称为运行时 的多态性。动态多态性是通过虚函数实现的。
(2)希望用基类指针访问其公有派生类的特定成员,必须将基 类指针用显示类型转换为派生类指针。
第七章 虚函数和多态性
• 7.1 虚函数
虚函数与多态性
1.虚函数的概念
一个指向基类的指针可用来指向从基类公有派生的 任何对象,这一事实是非常重要的,是 C++ 实现 运行时多态性的关键途径。如果有多个或者多层 派生类,通过一个基类指针可以访问所有派生类 对象的成员函数,这样就可以实现一个接口,多 个实现的访问了。但是观察例7-3,基类指针能否 访问不同派生类对象的成员函数呢?

实验07_多态性_函数与运算符重载

实验07_多态性_函数与运算符重载

实验07.多态性-函数与运算符重载7.1实验目的1、理解动态联编和动态联编的概念;2、理解掌握成员函数方式运算符重载;3、理解掌握友元函数方式运算符重载;4、理解掌握++、--、=运算符的重载;7.2实验内容7.2.1程序阅读与调试1.理解下面的程序,并在Code::Blocks下运行查看结果,回答程序后面的问题。

问题1:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型问题2:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数。

问题3:本程序的执行结果是什么。

——请将上述问题的解答填写在实验报告对应题号下面。

2.理解下面的程序,并在Code::Blocks下运行查看结果,回答程序后面的问题。

问题1:以上程序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果?——请将上述问题的解答填写在实验报告对应题号下面7.2.2程序设计1.对7.2.1中的第2个程序,如果要实现后缀的--,即在主函数中添加以下语句:CComplex obj5 = obj3--;cout << "postfix after , obj5=obj3--; obj5 = "; obj5.print();cout << "postfix after , obj5=obj3--; obj3 = "; obj3.print();后输出:postfix after , obj5=obj3--; obj5 = 6.7 + 6.7ipostfix after , obj5=obj3--; obj3 = 5.7 + 5.7i应该如何扩展程序。

该程序命名为exp07_p1_1.cpp。

7.3思考题1、定义CPoint类,有两个成员变量:横坐标(x)和纵坐标(y),对CPoint 类重载“++”(自增运算符)、“--”(自减运算符),实现对坐标值的改变。

C实验报告-实验5多态性与虚函数

C实验报告-实验5多态性与虚函数

实验5 多态性与虚函数一、实验目的和要求了解静态联编和动态联编的概念。

掌握动态联编的条件。

二、实验内容和原理事先编写好程序,上机调试和运行程序,分析结果。

(1)实验指导书P96 1~4任选一题。

(2)实验指导书P100 5~6任选一题。

三、实验环境联想计算机,Windows XP操作系统,Visual C++ 6.0四、算法描述及实验步骤(1)编写源程序。

(2)检查程序有无错误(包括语法错误和逻辑错误),有则改之。

(3)编译和连接,仔细分析编译信息,如有错误应找出原因并改正之。

(4)运行程序,分析结果。

(5)将调试好的程序保存在自己的用户目录中,文件名自定。

五、调试过程12六、实验结果15七、总结动态联编需要满足3个条件,首先类之间满足类型兼容规则;第二是要声明虚函数;第三是要由成员函数来调用或者是通过基类指针、引用来访问虚函数。

附录:1.public:virtual void f(float x){cout<<"Base::f(float)"<<x<<endl;} void g(float x){cout<<"Base::g(float)"<<x<<endl;}void h(float x ){cout<<"Base::h(float)"<<x<<endl;} };class Derived:public Base{public:virtual void f(float x){cout<<"Derived::h(float)"<<x<<endl;}};int main(){Derived d;Base * pb=&d;Derived *pd=&d;pb->f(3.14f);pb->f(3.14f);pb->g(3.14f);pb->h(3.14f);pb->h(3.14f);return 0;}2#include<iostream>using namespace std;#include<string>class Teacher{public:Teacher(string n,int h);virtual double salary()=0;virtual void print()=0;protected:string name;int lessons;};Teacher::Teacher(string n,int h){name=n;lessons=h;}class Professor:public Teacher{public:Professor(string n,int h):Teacher(n,h){}double salary(){return 5000 + 50 * lessons;}void print();void Professor::print(){cout<<name<<"\tProfessor\t\t"<<lessons<<"lessons"; cout<<"\tearned ¥"<<salary()<<endl;}class Associateprofessor:public Teacher{public:Associateprofessor(string n,int h):Teacher(n,h){}double salary(){return 3000+30*lessons;}void print();};void Associateprofessor::print(){cout<<na#include<iostream>using namespace std;#include<string>class Teacher{public:Teacher(string n,int h);virtual double salary()=0;virtual void print()=0;protected:string name;int lessons;};Teacher::Teacher(string n,int h){name=n;lessons=h;}class Professor:public Teacher{public:Professor(string n,int h):Teacher(n,h){}double salary(){return 5000 + 50 * lessons;}void print();};void Professor::print(){cout<<name<<"\tProfessor\t\t"<<lessons<<"lessons"; cout<<"\tearned ¥"<<salary()<<endl;}class Associateprofessor:public Teacher{public:Associateprofessor(string n,int h):Teacher(n,h){}double salary(){return 3000+30*lessons;}void print();};void Ass me<<"\tAssociateprofessor\t"<<lessons<<"lessons"; cout<<"\tearned ¥"<<salary()<<endl;}class Lecturer:public Teacher{public:Lecturer(string n,int h):Teacher(n,h){}double salary(){return 2000+20*lessons;}void print();};void Lecturer::print(){cout<<name<<"\tLecturer\t\t"<<lessons<<"lessons";cout<<"\tearned ¥"<<salary()<<endl;}int main(){Teacher * t[3];t[0]=new Professor("Tang XiHua",12);t[1]=new Associateprofessor("Li HanPin",16);t[2]=new Lecturer("Zhang Y ue",20);for(int i=0;i<3;i++){t[i]->print();delete t[i];}return 0;}。

C程序设计运算符重载实验报告

C程序设计运算符重载实验报告
Ps:同时注意复数的显示。
程序设计如下:(基于vs2010运行)
.* :: ?: # 等几个。同时进一步的掌握了类的定义,对复数新建了Complex类,同时对新建的类进行了复数的加减比较大小等运算。对C++语言有了进一步的掌握。




实验内容和设计(A-E):
操作过程、算法或代码(A-E):
实验结果(A-E):
(2)学会运算符重载的成员函数法和友元函数法;?
(3)能区分单目运算符的前置与后置。
二、实验内容与设计(主要内容,操作步骤、算法描述或程序代码)
本次实验主要实现以下内容:
【项目内容】?
定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”“++”“--”“>”“<”,使之能用于复数的加、减、乘、除、自增、自减、比较大小。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积、商、自增、自减、比较大小。?提示:注意复数的乘、除法计算。
实验分析和总结(A-E):
实验成绩(A-E):
反馈评语:
专业课程实验报告
课程名称:面向对象程序设计(C++)
开课学期:2015至2016学年第1学期
专业:计算机科学与技术年级班级:13计科
学生姓名:侯瑄学号:2
实验教师:陈睿
计算机与信Leabharlann 科学学院软件学院实验项目名称
C++程序设计运算符重载
实验时间
实验类型
□验证性□设计性□综合性
一、实验目的和要求
(1)掌握通过运算符重载实现多态性的方法;

试验6 多态和虚函数、运算符重载

试验6 多态和虚函数、运算符重载

试验内容(1)程序Ex_Shape:定义一个抽象类Cshape,包含纯虚数函数Area(用于计算面积)和SetData (用于重设形状大小),然后派生出三角形Ctriangle类,矩形Crect类、园Ccircle类,分别求其面积。

最后定义一个Carea类,计算这几个形状的面积之和,各形状的数据通过Carea类构造函数或成员函数来设置,编写一个完整的程序。

(2)程序Ex_Complex;定义一个复数类Ccomplex,通过重载运算符“*”和“/”,直接实现两个复数之间的乘除运算。

运算符“*”用成员函数实现重载,而运算符“/”用友元函数实现重载。

编写一个完整的程序(包括测试运算符的程序部分)。

提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i ,而两复数相除的计算公式为: (a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/ (c*c+d*d)i。

实验准备和说明(1)在学习完第2章的“运算符重载”内容之后进行本次实验。

(2)编写本次上机所需要的程序。

实验步骤1.创建工作文件夹打开计算机,在“D:\Visual C++程序\ Li Ming”文件夹中创建一个新的子文件夹”实验6“。

2.输入并运算程序Ex_Shape.cpp输入并运算程序Ex_Shape.cpp的具体步骤如下。

(1)启动VisualC++6.0.(2)单击标准工具栏上的“”按钮,在新打开的文档窗口中输入下列程序代码:#include<iostream.h>Class Cshape{public:virtual float Area()=0; //将Area定义成纯虚函数virtual void SetData(float f1, float f2)=0; //将SetData定义成纯虚函数};class Ctriangle:public Cshape{public:Ctriangle(float h=0, float w=0){H=h; W=w; }float Area() //在派生类定义纯虚函数的具体实现代码{ return(float)(H*W*0.5); }void SetData(float f1, float f2){ H=f1; W=f2; }private:floatH,W;};Class Crect :publicCShape{public:Crect(float h=0, float w=0){ H=h; W=w; }float Area() //在派生类定义纯虚函数的具体实现代码{ return(float)(H*W); }void SetData(float f1, float f2){ H=f1; W=f2; }private:float H,W;};Class Ccircle: public Cshape{public:Ccircle(float r=0){ R=r;}float Area() //在派生类定义纯虚函数的具体实现代码{ return(float)(3.14159265*R*R); }void SetData(float r, float) //保持与纯虚函数一致{ R=r;}private:float R;};class CArea{public:CArea(float triWidth,float triHeight,float rcHeidht,float r) {ppShape=new Cshape*[3];ppShape[0]= new CTriangle(triWidth,triHeight);ppShape[1]= new CRect(Crect(rcWidth,rcHeight);ppShape[2]= new CCircle(r);}~CArea(){for(inti=0;i<3;i++)delete ppShape[i];delete []ppShape;}void SetShapeData(int n,float f1,floatf2=0)∥n为0表示操作的是三角形,1表示矩形,2表示圆形{if((n>2)‖(n<0)return;ppShape[n]->SetData(f1,f2);}void.CalAndPrint(void) ∥计算并输出{float fSnm=0.0;char*str[3]= {“三角”,“矩”,“圆” };for(int i=0;i<3;i++){float area= ppShape[i]->Area();∥通过基类指针,求不同形状的面积cout<<str[i]<<“形面积是:“<<area<<endl;fSum+=aera;}co unt<<“总面积是”<<fSum<<endl;}Private:Cshape**ppShape; ∥指向基类的指针数组}void main(){Carea a(10,20,6,8,6.5);a.CalAndprint();a.A.setshapedata(0,20,30);a.CalAndprint();a.SetShapeData(2,11);a.CalAndprint();a.setShapeData(1,2,5):a.CalAndprint();}(3) 单击标准工具栏的Save按钮,弹出“保存为”文件对话框,将文件定位到“D\VisualC++程序\LiMing\实验6”,文件名为Ex_shape.cpp。

程序设计二(面向对象)_实训13_虚函数

程序设计二(面向对象)_实训13_虚函数

程序设计二(面向对象)_实训13_虚函数虚函数是面向对象程序设计中的一个重要概念,它在继承和多态的实现中起着关键的作用。

本文将介绍虚函数的概念、作用、使用方法以及一些注意事项。

一、什么是虚函数在面向对象的程序设计中,虚函数是一种特殊的成员函数,它可以在基类中声明为虚函数,并在派生类中进行重写。

通过使用虚函数,我们可以实现多态性,即同一个函数在不同的对象上表现出不同的行为。

二、虚函数的作用虚函数的主要作用是实现动态绑定。

在程序运行时,根据对象的实际类型来确定调用哪个函数。

这使得我们可以通过基类指针或引用来调用派生类的函数,实现了对派生类对象的统一操作。

三、虚函数的使用方法1. 在基类中声明虚函数:在基类中将需要在派生类中重写的函数声明为虚函数。

例如,我们有一个基类Animal,其中有一个虚函数makeSound(),表示动物发出声音。

2. 在派生类中重写虚函数:派生类继承基类后,可以重写基类中的虚函数,并根据实际需求修改函数的实现。

例如,我们有一个派生类Dog,它重写了基类中的makeSound()函数,表示狗的叫声。

3. 使用基类指针或引用调用虚函数:在程序中,我们可以使用基类的指针或引用来调用派生类中重写的虚函数,实现对派生类对象的统一操作。

例如,我们可以使用Animal*指针指向Dog对象,并通过该指针调用makeSound()函数,即使实际对象是Dog类型,也能正确调用Dog类中的makeSound()函数。

四、虚函数的注意事项1. 虚函数必须是非静态成员函数。

虚函数与对象的状态有关,因此必须是非静态成员函数。

2. 虚函数可以被派生类重写,但不能被派生类隐藏。

派生类重写虚函数时,函数的签名必须与基类中的虚函数相同,即函数名、参数列表和返回类型都要相同。

否则,派生类中的函数将隐藏基类中的虚函数,而不是重写。

3. 构造函数和析构函数不能是虚函数。

构造函数和析构函数在对象的创建和销毁过程中起着重要作用,因此不能声明为虚函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实 验 报 告
(计算机类)
课程名称:
Vc语言程序设计
实验项目:
多态和虚函数、运算符重载
计算机号:
院系专业:
班级学号:
学生姓名:
实验日期:
信息管理学院
实践教学中心
一、实验目的:
熟练掌握虚函数的使用方法,加深对多态性的理解
掌握运算符重载的方法。
二、实验内容:
分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)。要求:
(1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
(2)在Teacher类中还包含数据成员 title(职称),在Cadre类中还包含数据成员post(财务)。在Teacher_Cadre类中还包含数据成员wages(工资)
(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
void display();
protected:
string name;
int age;
char sex;
string post;
string addr;
string tel;
};
Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):
name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}
void Cadre::display()
{cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"post:"<<post<<endl;
void show( );
private:
float wage;
};
Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):
Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}
void display();
protected:
string name;
int age;
char sex;
string title;
string addr;
string tel;
};
Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):
WindowsXP操作系统
ACCESS或SQL数据库
VS2010 VC++
备注:序号(一)、(二)、(三)为实验预习填写项
四、实验步骤及程序编辑:
#include<string>
#include <iostream>
using namespace std;
class Teacher
{public:
Teacher(string nam,int a,char s,string tit,string ad,string t);
(4)在类体中声明成员函数,在类外定义成员函数。
(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
三、实验环境(使用硬件、软件等):
计算机(CPU PIII以上 ,内存128M以上,硬盘20G以上 )
cout<<"title:"<<title<<endl;
cout<<"endl;
cout<<"tel:"<<tel<<endl;
}
class Cadre
{public:
Cadre(string nam,int a,char s,string p,string ad,string t);
cout<<"address:"<<addr<<endl;
cout<<"tel:"<<tel<<endl;
}
class Teacher_Cadre:public Teacher,public Cadre
{public:
Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);
void Teacher_Cadre::show( )
{Teacher::display();
cout<<"post:"<<Cadre::post<<endl;
cout<<"wages:"<<wage<<endl;
}
int main( )
{Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);
name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }
void Teacher::display()
{cout<<"name:"<<name<<endl;
cout<<"age"<<age<<endl;
cout<<"sex:"<<sex<<endl;
te_ca.show( );
return 0;
}
五、程序调试及实验总结:
六、教师评语:
该学生上课积极,态度端正,及时完成布置的实验项目,善于沟通交流,完成质量较高.
成 绩
主讲教师:
相关文档
最新文档