文档库 最新最全的文档下载
当前位置:文档库 › 多态和虚函数、运算符重载

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

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

(3)单击标准工作栏的Save按钮,将文件保存到指定地点,并命名。

(4)编译运行。

3、输入并运行程序Ex_Complex的具体步骤如下。

(1) 选择“文件” “关闭工作区间”,关闭原来的项目。

(2) 单击标准工具栏上的“New Text File”按钮,在新打开的文档窗口中输入下列程序代码:

#include

class CComplex

{

public:

CComplex(double r=0,double i=0)

{realPart=r;imagePart=i;}

void print()

{cout<<"该复数实部="<

CComplex operator*(CComplex &b);//成员函数重载运算符*

friend CComplex operator/(CComplex &a,CComplex &b);友元函数重载运算符private:

五、分析与体会:

1、象程序设计多态性是面向对象程序设计的重要特征之一,他与封装性和继承

性构成了面向对的三大特征。所谓多态性,是指不同类型的对象接受相同的消息是产生不同的行为。这里的消息主要是指对类的成员函数的调用,而不同的行为是指成员函数的不同实现。如:函数重载就是多态的典型例子。2、此程序中定义了一个抽象类CShape,包含纯虚函数Area和SetData,Area用于计算各个形状的面积,SetData用于重设各个形状的大小。程序代码中虚函数Area和SetData是通过在基类函数的前面加上virtual关键字来实现的。程序中ppShape是定义的基类CShape的指针,通过语句ppShape[0]=newTriangle(triWidth,triHeight);ppShape[1]=new(rcWidth,rcHeight); ppShape[2]=new CCircle(r);是将ppShape[0]、ppShape[1]和ppShape[2]分别获得对派生类CTriangle、CRect和CCircle的成员函数的调用,因而语句ppShape[n]->SetData(f1,f2);根据n值的不同调用不同的形状类的area函数,例

运算符重载基础概念练习题

运算符重载基础概念练习题 1、下列运算符中, ()运算符在C++中不能重载。 A = B () C :: D delete 2、下列运算符中, ()运算符在C++中不能重载。 A ?: B [] C new D && 3、下列关于C++运算符函数的返回类型的描述中,错误的是()。 A 可以是类类型 B 可以是int类型 C 可以是void类型 D 可以是float类型 4、下列运算符不能用友元函数重载的是()。 A + B = C * D << 5、在重载运算符函数时,下面()运算符必须重载为类成员函数形式。 A + B - C ++ D -> 6、下列关于运算符重载的描述中,正确的是()。 A 运算符重载可以改变运算符的操作数的个数 B 运算符重载可以改变优先级 C 运算符重载可以改变结合性 D 运算符重载不可以改变语法结构 7、友元运算符obj>obj2被C++编译器解释为()。 A operator>(obj1,obj2) B >(obj1,obj2) C obj2.operator>(obj1) D obj1.oprator>(obj2) 8、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。 A operator+有两个参数,operator*有两个参数 B operator+有两个参数,operator*有一个参数 C operator+有一个参数,operator*有两个参数 D operator+有一个参数,operator*有一个参数 9、重载赋值操作符时,应声明为()函数。 A 友元 B 虚 C 成员 D 多态 10、在一个类中可以对一个操作符进行()重载。 A 1种 B 2种以下 C 3种以下 D 多种 11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

习题10-运算符重载与多态性

C 、可以是void 类型 D 、可以是float 类型 A 、运算符重载可以改变运算符的操作数的个数 B 、运算符重载可以改变优先级 C 、运算符重载可以改变结合性 D 、运算符重载不可以改变语法结构 A 、动态联编是以虚函数为基础的 B 、动态联编是在运行时确定所调用的函数代码的 C 、动态联编调用函数操作是指向对象的指针或对象引用 D 、动态联编是在编译时确定操作函数的 A 、虚函数是一个静态成员函数 B 、虚函数是一个非成员函数 C 、虚函数既可以在函数说明时定义,也可以在函数实现时定义 D 、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 B 、重载函数和析构函数 C 、虚函数和对象 习题 10 运算符重载与多 态性 、单项选择题 A 、 ? : B 、 [ ] C 、 new D 、 && 2、 下列运算符不能用友元函数重载的是( )。 A 、 + B 、 = C 、 * D 、 << 3、 在一个类中可以对一个操作符进行( )重载。 A 、 1种 B 、 2 种以下 C 、 3 种以下 D 、 多种 4、友元运算符 obj1>obj2 被 C++ 编译器解释为( )。 1、下列运算符中,( )运算符在C++中不能重载。 A 、 operator > (obj1, obj2) B 、 > (obj1, obj2) C 、 obj2.operator > (obj1) D 、 obj1.operator > (obj2) 5、下列关于C++运算符函数的返回类型的描述中,错误的是( ) 。 A 、可以是类类型 B 、可以是int 类型 6、下列关于运算符重载的描述中,正确的是( )。 9、对虚函数的调用( ) 。 A 、 定使用动态联编 B 、必须使用动态联编 C 、 定使用静态联编 D 、不一定使用动态联编 10、编译时的多态性可以通过使用( )获 得。 7、下列关于动态联编的描述中,错误的是( )。 8、关于虚函数的描述中,正确的是( )。 A 、虚函数和指针 D 、虚函数和引用

实验8 多态性与虚函数

实验八多态性与虚函数 一、实验目的和要求 1.了解多态的概念; 2.了解虚函数的作用及使用方法; 3.了解静态关联和动态关联的概念和用法; 4.了解纯虚函数和抽象类的概念和用法 二、实验内容和结果 1.阅读下面的程序 1.1请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: void run() const { cout << "run a vehicle. "<

airplane.run(); cout<<"(b) 用指向基类的指针访问成员函数: "<run(); vp=&airplane; vp‐>run(); } 1.2 如果将Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<

c++运算符重载习题

Task8-1 /* 1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和*/ #include using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} void display(); double real; double imag; }; void Complex::display() { cout<<"("<

class Rectangle:public Shape { public: Rectangle(double a,double b):l(a),w(b){} virtual float area()const{return l*w;} virtual void display()const { cout<<"矩形面积"<display(); m=m+p[i]->area(); }

C++第13章答案

C++习题参考答案 第1章面向对象程序设计概论 一、名词解释 抽象封装消息 【问题解答】 面向对象方法中得抽象就是指对具体问题(对象)进行概括,抽出一类对象得公共性质并加 以描述得过程、 面向对象方法中得封装就就是把抽象出来得对象得属性与行为结合成一个独立得单位,并 尽可能隐蔽对象得内部细节。 消息就是面向对象程序设计用来描述对象之间通信得机制。一个消息就就是一个对象要求另一个对象实施某种操作得一个请求。 二、填空题 (1) 目前有面向过程得结构化程序设计方法与面向对象得程序设计方法两种重要得程序设计方法。 (2) 结构化程序设计方法中得模块由顺序、选择与循环3种基本结构组成。 (3) 在结构化程序设计方法中,程序可表示为程序=数据结构+算法; 而面向对象得程序设计 方法,程序可表示为程序=对象+消息。 (4) 结构化程序设计方法中得基本模块就是过程; 而面向对象程序设计方法中得基本模块就是类。 (5) 面向对象程序设计方法具有抽象性、封装性、继承性与多态性等特点、 三、选择题(至少选一个,可以多选) (1) 面向对象程序设计着重于( B )得设计。 A。对象B。类C、算法D、数据 (2) 面向对象程序设计中,把对象得属性与行为组织在同一个模块内得机制叫做( C )。A、抽象 B。继承 C。封装D. 多态 (3) 在面向对象程序设计中,类通过( D )与外界发生关系。 A、对象 B. 类C、消息D。接口 (4) 面向对象程序设计中,对象与对象之间得通信机制就是( C )。 A、对象 B。类 C. 消息 D、接口 (5) 关于C++与C语言得关系得描述中,( D )就是错误得、 A、 C语言就是C++得一个子集B、C语言与C++就是兼容得 C. C++对C语言进行了一些改进 D. C++与C语言都就是面向对象得 【结果分析】 C语言就是面向过程得。C++语言就是一种经过改进得更为优化得C语言,就是一种混合型语言,既面向过程也面向对象、 (6) 面向对象得程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割得整体来处理。 A、算法 B。信息C、数据隐藏 D、数据抽象 (7) 下面( A )不就是面向对象系统所包含得要素。 A。重载 B、对象 C. 类 D。继承 【结果分析】 面向对象=对象+类+继承+消息+多态 (8) 下面说法正确得就是( BC )。 A。将数据结构与算法置于同一个函数内,即为数据封装 B。一个类通过继承可以获得另一个类得特性 C。面向对象要求程序员集中于事物得本质特征,用抽象得观点瞧待程序 D。同一消息为不同得对象接受时,产生得行为就是一样得,这称为一致性 【结果分析】

运算符重载注意

运算符重载(operator overload) 是c++的一个重要的新特性,它使得程序员把c++运算符定义扩展到操作数是对象的情况.运算符重载的目的是使c++程序更加直观,更易懂. 运算符重载和普通的重载一样: 作用域相同,函数名字相同,但参数不同(参数个数,参数的类型) , 注意如果函数名字相同,参数相同但函数的返回值类型不同这不是重载,这是错误! 返回值类型operator 被重载的运算符(参数...){函数的实现} 具体的例子网上有很多, 我的重点是一些我们在写重载中易忽略的一些小问题. 有时候我们的程序在多数情况下是对的但有时也总有一些出乎我们意料的情况: 请看下面这个程序: #include #include using namespace std; int/*explicit*/ add(int a,int b) //1 { cout<<"int int"<int) //这里编译器不会把2向上转换即(int->double) 这的强者类型转换 //呵呵恐怖吗你以为你在调用第二个函数结果调用的是第一个 system("pause"); }

西华大学C++实验报告5 多态和虚函数、运算符重载

. 西华大学实验报告(计算机类) 开课学院及实验室:机械工程与自动化 实验时间 : 年 月 日 一、实验目的 1. 理解虚函数的特性; 2. 理解纯虚函数和抽象类的特性; 3. 掌握用虚函数实现运行时的多态性和编写通用程序的方法; 4. 掌握用成员函数和友元函数重修运算符的方法。 二、内容与设计思想 上机实践内容: 1. 定义一个抽象类CShape ,包含纯虚函数Area ()(原来计算面积)和SetData ()(原 来重设形状大小)。然后派生出三角形CTriangle 类、矩形CRect 类、圆CCircle 类,分别求其面积。最后定义一个CArea 类,计算这几个形状的面积之和,个形状的数据通过CArea 类构造函数或成员函数来设置。编程一个完整的程序。 2. 定义一个复数类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 三、使用环境 操作系统:Windowns XP C++环境:Visual C++ 6.0

四、核心代码及调试过程 #include using namespace std; class CShape { public: virtual float Area()=0; virtual void SetData(float f1,float f2)=0; }; 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: float H,W; }; class CRect:public CShape { public: CRect(float h=0,float w=0) { H=h; W=w; } float Area()

C++实验多态性实验报告

贵州大学实验报告 学院:电子信息学院专业:通信工程班级: 姓名学号实验组5实验时间指导教师成绩 实验项目名称多态性 实 验通过让学生进行实验,使其对于动态多态性有一个较为深入的了解和熟悉。最终可以目熟练使用。 的 实 1.编写 4 个重载函数 Double( x),返回值为输入参数的两倍;参数类型分别为int 、验long 、float 、 double ,返回值类型与参数类型一样。 2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有 要 计算对象面积的函数GetArea ()和计算周长函数GetPerim ()。 求3.对类 Point 重载 ++(自增)、 -- (自减)运算符。 实 验Visual C++的编译环境下,独立完成实验要求的内容,独立完成编写、编译以及运行 原的过程 理 实 验 安装了 Visual C++ 的 PC机器 仪 器 实 验 按照实验要求的内容逐一完成实验的要求。顺序是编写、编译、运行。 步 骤

实 1. 编写 4 个重载函数 Double(x),返回值为输入参数的两倍;参数类型分别为int、 验 long 、 float 、 double ,返回值类型与参数类型一样。 2. 请编写一个抽象类Shape,在此基础上派生出类Rectangle 和 Circle,二者都有计 内算对象面积的函数GetArea ()和计算周长函数GetPerim ()。容 3. 对类 Point 重载 ++(自增)、 -- (自减)运算符。 1、代码如下: #include using namespace std; int Double(int x); long Double(long x); float Double(float x); double Double(double x); int main() { int myInt = 6500; cout< #define PI 3.1415926; using namespace std; class Shape // 抽象类的定义 { public: virtual double GetArea()= 0; //纯虚函数

C++运算符重载题库及答案

运算符重载 一.单项选择题 1.下列运算符中,运算符在C++中不能重载。 A.?:B.+C.D.<= 解:C++中不能被重载的运算符有:·,一,::,?:。本题答案为A。 2.下列运算符中,运算符在C++中不能重载。 A.&&B.[]C.::D.new 解:c++中不能被重载的运算符有:·,·+,::,?:。本题答案为c。 3 . 下列关于运算符重载的描述中, 是正确的。 A .运算符重载可以改变操作数的个数 B .运算符重载可以改变优先级 C

.运算符重载可以改变结合性 D .运算符重载不可以改变语法结构 解: 运算符重载不能改变操作数的个数、运算符的优先级、 运算符的结合性和运算程的语 法结构。本题答案为 D 。 4 .友元运算符 objl>obj2 被 C++ 编译器解释为 。 A .

operator>(objl , obj2) B . >(obj1 , obj2) C . obj2 . operator : >(obj1) D . objl . operator>(obj2) 解:重载为友元函数的运算符的调用形式如下: operator< 运算符 >(< 参数

, < 参数 2>) 等价于: < 参数 1>< 运算符 >< 参数 2> 本题答案为 A 。 5 .现需要对 list 类对象使用的逻辑运算符“== ”重载,以下函数声明

是正确的。 A 、 list&list : : operator==(const list&a) ; B 、 list list : : operator==(const list&a) ; C 、 bool&list : :

实验六 多态性和虚函数

实验六多态性和虚函数 一、实验目的 1、了解多态性的概念。 2、了解虚函数的作用及其使用方法。 3、了解静态关联和动态关联的概念和用法。 4、了解纯虚函数和抽象类的概念和用法。 二、实验要求 1、分析程序运行结果,掌握虚函数的使用。 程序一: #include class ONE { public: virtual void f(){cout<<"l"<f(); } 程序二: #include class Base { public: virtual void fn() { cout <<"In Base Class\n";} }; class SubClass :public Base { public: virtual void fn(){ cout <<"In Sub Class\n"; } }; void main()

{ Base bc,*p; SubClass sc; p=&bc; p->fn(); p=≻ p->fn(); } 2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。主函数中声明类B对象,调用类B中的geta()并将结果输出。 3、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle (三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。

实验三虚函数与多态纯虚函数(完全版)

实验三虚函数与多态、纯虚函数 一.实验目的 1. 在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态。 2. 学会定义和使用纯虚函数 二、实验内容 1.范例:了解"单接口,多方法"的概念。现有称为figure的基类,存放了各二维对象(三角形、矩形和圆形三个类)的各维数据,set_dim()设置数据,是标准成员函数。 show_area()为虚函数,因为计算各对象的面积的方法是不同的。 【程序】 #include < iostream > using namespace std; class figure{ protected: double x,y;

public: void set_dim(double i,double j=0) { x=i; y=j; } virtual void show_area() { cout<<"No area computation defined for this class.\n"; } }; class triangle:public figure{ public: void show_area() { cout<<"Triangle with height "<< x<<" and base "<< y<<" has an area of "<< x*0.5*y<< endl; } }; class square:public figure{ public:

void show_area() { cout<<"Square with dimensions "<< x<<" and "<< y<<" has an area of "<< x*y<< endl; } }; class circle:public figure{ public: void show_area() { cout<<"Circle with radius "<< x<<" has an area of "<<3.14159*x*x<< endl; } }; int main(){ figure *p; triangle t; square s;

相关文档
相关文档 最新文档