实验十多态性—虚函数的应用 - 参考答案

实验十多态性—虚函数的应用 - 参考答案
实验十多态性—虚函数的应用 - 参考答案

实验十多态性—虚函数的应用10.1 实验目的

1.理解和掌握虚函数的作用;

2.掌握利用虚函数实现C++的运行时多态性;

3.理解纯虚类和抽象类。

10.2 实验内容

10.2.1程序阅读

1.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include

using namespace std;

class Point

{

public:

Point(double i,double j)

{

x=i;

y=j;

}

double Area() const{return 0;}

private:

double x,y;

};

class Circle:public Point

{

public:

Circle(double i,double j,double k);

double Area() const {return 3.14*r*r;}

private:

double r;

};

Circle::Circle(double i,double j,double k):Point(i,j)

{

r=k;

}

void fun(Point &s)

{

cout<

}

int main()

{

Circle rec(3.0,5.2,15.0);

fun(rec); //…………………………………………①

return 0;

}

问题一:请解释①处函数的值传递过程。

答:派生类Circle对象rec向基类Point对象s赋值

问题二:主函数中定义了一个Circle类对象rec,并想通过调用fun函数求得rec对象的Area,请修改程序,使程序输出正确。

答:在基类Point中声明double Area() const{return 0;}为虚函数,语句如下:virtual double Area() const{return 0;}

2. 阅读下述程序,并回答程序之后的问题。

#include

using namespace std;

class A

{

public:

virtual void f(void)

{

cout<<"f function of class A is called! \n";

}

};

class B:public A

{

public:

void f(void)

{

cout<< "f function of class B is called! \n";

}

};

class C:public B

{

public:

void f(void)

{

cout<< "f function of class C is called! \n";

}

int main(void)

{

C objc,*p=&objc,&r=objc;

cout<<"Calling f based on object...\n";

____1____;

____2____;

____3____;

cout<<"Calling f based on reference...\n";

____4____;

____5____;

____6____;

cout<<"Calling f based on pointer...\n";

____7____;

____8____;

____9____;

return 0;

}

问题一:若程序输出为如下图所示,请填写1~9语句;

答:正确语句如下

cout<<"Calling f based on object...\n";

objc.f();

objc.A::f();

objc.B::f();

cout<<"Calling f based on reference...\n";

r.f();

r.A::f();

r.B::f();

cout<<"Calling f based on pointer...\n";

p->f();

p->A::f();

p->B::f();

问题二:将主函数更改为如下程序,试解释为什么A类指针可调用B、C类的f函数?int main(void)

A obja,*p;

B objb;

C objc;

p=&obja;

p->f();

p=&objb;

p->f();

p=&objc;

p->f();

return 0;

}

答:因为f函数在A类中定义为虚函数,而虚函数可以实现多态。

10.2.2 程序设计

1.编写一个程序计算三角形、正方形和圆形的面积,要求定义出一个基类Shape,为抽象类,在其中说明一个纯虚函数area,用来求面积。另外定义派生类Triangle、Rectangle、Circle 类,派生类中重定义函数area。在主函数中测试时,利用shape类指针分别指向Triangle、Rectangle、Circle对象,并分别求这些对象的面积。

程序如下:

#include

using namespace std;

class Shape

{ public:

virtual float area()=0;};

class Triangle:public Shape

{ protected:

float H,W;

public:

Triangle(float h,float w){H=h;W=w;}

float area(){return H*W*0.5;}

};

class Rectangle:public Triangle

{ public:

Rectangle(float h,float w):Triangle(h,w){}

float area(){return H*W;}

};

class Circle:public Shape

{ public:

Circle(float r){radius=r;}

float area(){return radius*radius*3.14;}

protected:

float radius;

};

int main()

{ Shape *s;

s =new Triangle(3.0,4.0);

cout<<" Triangle area is :"<area()<

s=new Rectangle(2.0,4.0);

cout<<" Rectangle area is :"<area()<

s=new Circle(5.0);

cout<<" Circle area is :"<area()<

return 0;

}

数学实验软件

重庆科技学院 数学实验与数学软件课程设计 课程名称:菜单与对话框设计 开课学期:_2014-2015-1 学院:__ 数理学院 开课实验室:_数学实验与建模实验室_ 学生姓名: 谭云文 专业班级: 应数13-2班 __ 学号:___ 20134432214 _

实验十二 我们本次实验做的是菜单与对话框设计,所谓菜单与对话框的设计包括在图形用户界面中。而图形用户界面是由窗口、菜单、对话框等各种图形元素组成的用户界面。因为在这种用户界面中,用户的操作既生动形象,又方便灵活,这是它的一大特点。 在MATLAB中,基本的图形用户界面对象包含3类:用户界面控件对象、下 拉式菜单对象和快捷菜单对象,可以设计出界面友好、操作方便的图形用户界面。 其中MATLAB用户菜单对象是图形窗口的子对象,所以菜单设计总在某一个图形 窗口中进行。MATLAB的图形窗口有自己的菜单栏。为了建立用户自己的菜单系 统,可以先将图形窗口的MenuBar属性设置为none,以取消图形窗口默认的菜 单,然后再建立用户自己的菜单。对话框是用户与计算机进行信息交流的临时窗 口,在现代软件中有着广泛的应用。在软件设计时,借助于对话框可以更好地满 足用户操作需要,使用户操作更加方面灵活。为了更便捷地进行用户界面设计, MATLAB提供了图形用户界面开发环境,这使得界面设计在可视化状态进行,设计过程中变得简单直观,实现了“所见即所得”。 例1 一、实验目的 1. 掌握plot菜单的方法。 2. 掌握建立控件对象的方法。 3. 掌握对话框设计的方法。 二、实验内容 设计图1所示的菜单。

菜单条上仅有Plot菜单,其中有Sine Wave、Cosine Wave和Exit共3个命令。若选择了其中的Sine Wave命令,则将绘制出正弦曲线;若选择了其中的Cosine Wave命令,则将绘制出余弦曲线;如果选择了Exit命令,则将关闭窗口。 程序如下: screen=get(0,'ScreenSize'); W=screen(3);H=screen(4); figure('Color',[1,1,1],'position',[0.2*H,0.2*H,0.5*W,0.3*H],... 'Name','图形演示系统','NumberTitle','off','Menubar','none'); %plot hplot=uimenu(gcf,'Label','&Plot'); uimenu(hplot,'Label','Sine Wave','Call',... ['t=-pi:pi/20:pi;','plot(t,sin(t));',... 'set(hgon,''Enable'',''on'');',... 'set(hgoff,''Enable'',''on'');',... 'set(hbon,''Enable'',''on'');',... 'set(hboff,''Enable'',''on'');']); uimenu(hplot,'Label','Cosine Wave','Call',... ['t=-pi:pi/20:pi;','plot(t,cos(t));',... 'set(hgon,''Enable'',''on'');',... 'set(hgoff,''Enable'',''on'');',... 'set(hbon,''Enable'',''on'');',... 'set(hboff,''Enable'',''on'');']); uimenu(hplot,'Label','&Exit','Call','close(gcf)'); 三、运行结果 1.点击SineWave函数将出现我们所需要的图像,如图: 2点击CosineWave函数将出现我们所需要的图像,如图:

实验6 多态性(一)

福建农林大学实验报告 实验6 多态性(一) 一、实验目的和要求 (1)掌握虚函数的定义与使用方法,进一步理解多态性的概念和分类。 (2)了解纯虚函数和抽象类的使用方法。 二、实验内容和原理 1、分析并调试下列程序,回答以下问题:(1)指出抽象类(2)指出虚函数,并说明它的作用(3)每个类的作用是什么?整个程序的作用是什么? 2、使用虚函数编写程序求球体、圆柱体和圆锥的体积,由于球体、圆柱体和圆锥都可以看做由圆继 承而来,所以可以定义圆类作为基类。在圆类中定义数据成员半径和一个求体积的虚函数。由圆类 派生出球体类、圆柱体类和圆锥类,在派生类中对圆类中的虚函数重新定义。编写一个外部函数求 各类形状的总体积。最后在main()函数中构造若干形状,并求它们的体积和。

三、实验环境 1. 硬件:PC机; 2. 软件:Windows操作系统、Visual C++ 6.0 四、算法描述及实验步骤 1、算法描述及步骤如下: (1)根据题目要求编写好程序代码并在VC环境下输入源程序。 (2)检查程序有无错误(包括语法错误和逻辑错误),有则改之。 (3)编译和连接,仔细分析编译信息,如有错误应找出原因并改正之。本题改正后的代码如下: #include const double PI=3.1415; class Shap { public:virtual double Area()=0; }; class Triangle:public Shap { public:Triangle(double h,double w) { H=h; W=w; } double Area() { return 0.5*H*W; } private:double H,W; }; class Circle:public Shap { public:Circle(double r) { R=r; } double Area() { return PI*R*R; } private:double R; }; double Total(Shap*s[],int n) { double sum=0; for(int i=0;i

数学应用软件实验报告(mathematica实验程序)1

徐州工程学院数理学院数学应用软件实验报告 课程(实验序号)数学应用软件实验 1 实验地点、日期数学建模机房2011 年 2 月23 日主要仪器设备计算机 使用的软件名称Mathematica 实验类型演示性实验 验证性实验 综合性实验√设计性实验 研究性实验 班级:姓名:孙娅学号:20090402223 一、实验题目名称:函数】变量和表达式 二、实验目的: 理解变量和算式、内核与前端处理器构成的人机对话系统,了解计算的精度问题个Mathematica使用中的几个问题。熟练掌握数的表示和计算、常用数学函数,会绘制简单函数的图形。通过上机初步了解数学应用软件,Mathematica的各种界面。 三、实验内容: 练习题1 1.计算下列各式的数值: (1) Log[2,10] Log[10]/Log[2] (2) Sqrt[Pi^2+1] 1 2 (3) Log[10,3264] Log[3264]/Log[10] (4) E^E ??/2 (5) Cos[135^0] Cos[1] (6) Sin[Pi^2/2] Sin[π2/2] (7) ArcSin[1/2] π/6 (8) 200! 7886578673647905035523632139321850622951359776871732632947425332443594499634033429203042 8401198462390417721213891963883025764279024263710506192662495282993111346285727076331723 7396988943922445621451664240254033291864131227428294853277524242407573903240321257405579

sizeof计算含有虚函数的类的空间大小

sizeof计算含有虚函数的类的空间大小 当我们计算一种数据类型所占用的空间大小时,很easy,sizeof就可以解决掉。如果我们计算一个类,一个空类,或者一个含有虚函数然后又派生子类时,这时候他们所占用的内存空间是如何变化的呢?下面我们就通过代码来介绍下。 一个不含有虚函数的普通类与其派生类的内存关系 class Base { public: Base(int x):a(x) {} void print() { cout<

2.对于Derived类 Derived类继承于Base类,自然的继承了其成员变量a,自身又扩展了自己的成员变量b,因而多了4个字节。所以Derived类所占用的内存空间大小应该为8字节。 一个含有虚函数的类与其派生类的内存空间占用关系 class A { public: A(int x):a(x){} virtual void print(){cout<

数学软件实验报告实验七

数学软件实验报告 学院名称:理学院专业年级: 姓名:学号: 课程:数学软件实验报告日期:2014年12月6日 实验七SIMULINK建模与工具箱的使用 一.实验目的 MATLAB 具有丰富的可用于各种专业方向的工具箱,这些工具箱已经形成了MATLAB 的系列产品。特别是动态仿真建模工具箱,更是成为许多工具箱的基础。本次实验的目的就是要使大家了解MA TLAB工具箱使用的基本方法,以及如何查询工具箱,主要掌握系统优化工具箱的使用和系统动态仿真建模工具箱的使用。 二.实验要求 MATLAB系统的工具箱十分的丰富,并且随着版本的不断升级,其工具箱还在不断地增加。通过本次实验,要求了解MA TLAB系统工具箱的分类与查询,会使用系统优化工具箱解决一些实际问题。能建立系统仿真方框图,并进行系统仿真模拟。 三.实验内容 最优化工具箱 非线性最小化函数 fgoalattain 多目标达到优化 constr 有约束最小化 fminbnd 有边界最小化 fminunc使用梯度法的无约束最小化 fminsearch 使用简单法的无约束最小化 fzero 非线性方程求解(数量情况) fsolve 非线性方程求解 lsqnonlin 非线性最小二乘 fminimax 最小的最大解 fseminf 半无穷区间最小化 2.矩阵问题的最小化 linprog 线性规划

quadprog 二次规划 lsqnonneg 非负线性最小二乘 lsqlin 约束线性最小二乘 第十章 10.1线性优化 >> f=[-5 4 2]; >> a=[6 -1 1;1 2 4]; >> b=[8 10]; >> 1b=[-1 0 0]; >> ib=[-1 0 0]; >> ub=[3 2]; >> [x,fval,exitflag,output,lambda]=linprog(f,a,b,[],[],ib,ub) Optimization terminated. x = 1.3333 0.0000 0.0000 fval = -6.6667 exitflag = 1 output = iterations: 7 algorithm: 'large-scale: interior point' cgiterations: 0 message: 'Optimization terminated.' constrviolation: 0 lambda = ineqlin: [2x1 double]

实验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++ 类的应用

C++考查题 关键词:友员函数成员函数抽象类纯虚函数 一.建立一个复数类imaginary,其私有数据成员x和y表示复数的实部和虚部,构造函数imaginary用于对复数的实部和虚部初始化,成员函数show用于显示复述对象,形式为“实部+虚部i”;友员函数add,sub,mul和div分别用于进行复数的加、减、乘和除法运算。在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后调用成员函数show输出计算结果。 编码实现上述要求并回答以下问题 (1)四个友员函数的形参和返回值分别是什么? (2)四个友员函数可以定义为相应的成员函数吗,写出原型 (3)比较友员函数与成员函数的用法 答:(1)四个友员函数的形参是f1,f2,函数返回值是f (2)四个友员函数可以定义为相应的成员函数,原型如下: 在Imaginary类内的函数声明: Imaginary operator+(Imaginary const&f2); Imaginary operator-(Imaginary const&f2); Imaginary operator*(Imaginary const&f2); Imaginary operator/(Imaginary const&f2); 在Imaginary类外的函数定义: Imaginary Imaginary::operator+(Imaginary const&f2) { Imaginary f; f.x=x+f2.x; f.y=y+f2.y; return f; } Imaginary Imaginary::operator-(Imaginary const&f2) { Imaginary f; f.x=x-f2.x; f.y=y-f2.y; return f; }

C++函数中那些不可以被声明为虚函数的函数

常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。 2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而virtual function主要是为了再不完全了解细节的情况下也能正确处理对象。另外,virtual函数是在不同类型的对象产生不同的动作,现在对象还没有产生,如何使用virtual函数来完成你想完成的动作。(这不就是典型的悖论) 3、为什么C++不支持内联成员函数为虚函数? 其实很简单,那内联函数就是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,这是不可能统一的。(再说了,inline函数在编译时被展开,虚函数在运行时才能动态的邦定函数) 4、为什么C++不支持静态成员函数为虚函数? 这也很简单,静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,他也没有要动态邦定的必要性。 5、为什么C++不支持友元函数为虚函数? 因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。 ********************************************************************* 1、顶层函数:多态的运行期行为体现在虚函数上,虚函数通过继承方式来体现出多态作用,顶层函数不属于成员函数,是不能被继承的。 2、构造函数:(1)构造函数不能被继承,因而不能声明为virtual函数。 (2)构造函数一般是用来初始化对象,只有在一个对象生成之后,才能发挥多态的作用,如果将构造函数声明为virtual函数,则表现为在对象还没有生成的情况下就使用了多态机制,因而是行不通的,如下例:

数学应用软件实验指导书(32课时)

《数学应用软件》实验指导书 覃义编 桂林电子科技大学 数学与计算科学学院 二O一三年三月

一、概述 本课程实验指导书是根据Holly Moore著,高会生,刘童娜,李聪聪译的《MA TLAB实用教程》编写的。通过上机实验,可帮助学生迅速掌握MATLAB的操作方法以及程序设计,并能够使用MA TLAB解决实际问题。 二、实验环境 本书选择的实验环境是计算机以及软件Matlab(版本7.5以上)一套。 三、实验课时安排 32课时,每个实验2课时。 四、实验要求 上机完成实验指导书中所规定的内容,自行按实验指导书要求完成程序设计和调试,并提交每次实验的实验报告,附带算法程序清单和算法输出结果。 五、实验考核要求 上机完成试验内容,并提交一份算法程序清单和数值结果。

实验一MATLAB的基本操作 一、实验目的 1.能独立安装MATLAB软件,熟悉MA TLAB的各个窗口及菜单功能,掌握其使用方法。 2.能够进行一些基本运算。 二、实验课时:4课时 三、实验原理 1.运行MA TLAB软件,打开MA TLAB窗口,了解命令窗口(Command Window,输入各种操作命令)、工作空间(Workspace,用于存储各种变量和结果的内存空间,可对变量进行编辑、保存、观察和删除)、当前目录(Current Directory,MATLAB运行时的工作目录)、历史命令(Command History,自动保留所用过的命令的历史记录,通过双击,可以使历史命令再运行)、菜单栏、工具栏及start按钮(提供快速访问MATLAB的各种功能和查阅MATLAB包含的各种资源的命令菜单)的功能。 2.命令输入方式 在命令窗口>>符号后面输入命令。一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号分隔。若前一命令后带有分号,则逗号可以省略,此时只显示最后一条命令的执行结果。例如,

c++多态性与虚函数习题

作业题 一、写出下列程序运行结果 1.#include using namespace std; class A { public: virtual void func( ) {cout<<”func in class A”< using namespace std; class A{ public: virtual ~A( ){ cout<<”A::~A( ) called “<

}; void fun(A *a) { delete a; } int main( ) { A *a=new B(10); fun(a); } 二、程序设计题 1有一个交通工具类vehicle,将它作为基类派生小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。 5.2定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。 5.5某学校对教师每月工资的计算公式如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。给出教师抽象类及主函数,补充编写程序求若干教师的月工资。 #include using namespace std; class Teacher{ protected: double salary; int workhours; public: Teacher(int wh=0){workhours=wh;} virtual void cal_salary()=0; void print(){cout<cal_salary(); prof.print(); Vice_Prof vice_prof(250); pt=&vice_prof; pt->cal_salary(); vice_prof.print(); Lecture lecture(100); pt=&lecture; pt->cal_salary(); lecture.print (); return 0; }

多继承_虚函数表解析

C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针 指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针 有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可 变的算法。比如:模板技术,RTTI 技术,虚函数技术,要么是试图做到在编译时决议,要么试图 做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的 C++的书籍。在这篇 文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的 代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我 想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对 C++ 了解的人都应该知道虚函数 (Virtual Function) 是通过一张虚函数表 (Virtual Table) 来实现的。简称为 V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、 覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由 为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 这里我们着重看一下这张虚函数表。C++的编译器应该是保证虚函数表的指针存在于对象实例 中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或是多重继承 的情况下) 这意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指 。 针,并调用相应的函数。 听我扯了那么多,我可以感觉出来你现在可能比以前更加晕头转向了。 没关系,下面就是实 际的例子,相信聪明的你一看就明白了。 假设我们有这样的一个类: 以下是引用片段: class Base { public: virtual void f() { cout << "Base::f" << endl; } virtual void g() { cout << "Base::g" << endl; } virtual void h() { cout << "Base::h" << endl; } };
按照上面的说法,我们可以通过 Base 的实例来得到虚函数表。 下面是实际例程: 以下是引用片段: typedef void(*Fun)(void);

数学软件实训报告

数学软件应用实训 实训报告 学生姓名韩* 学号13090***** 班级信计1302班 成绩 指导教师 数学与计算机科学学院 2015年12月15日

实训报告评阅

1特殊函数与图形 问题背景与实验目的 著名的Riemann函数大家都很熟悉了,但是关于它的图像你是否清楚呢?除了最上面那几点,其他都很难画吧?你想不想看看下面那些“挤在一起”的点是怎样分布的呢?还有几何中的马鞍面、单叶双曲面等是怎样由直线生成的,是不是也想目睹一下呢?这些,都离不开绘图. 实际上绘图一直是数学中的一种重要手段,借助图形,往往可以化繁为简,使抽象的对象得到明白直观的体现.比如函数的基本性质,一个图形常可以使之一目了然,非常有效.它虽不能代替严格的分析与证明,但在问题的研究过程中,可以帮助研究人员节约相当一部分精力.此外,它还可以使计算、证明、建模等的结果得到更明白易懂的表现,有时,这比科学论证更有说服力. 同时,数学的教学与学习过程也离不开绘图.借助直观的图形,常可以使初学者更容易接受新知识.如数学分析中有不少函数,其解析式着实让人望而生畏,即使对其性质作了详尽的分析,还是感到难明就里;但如果能看到它的图形,再配合理论分析,则问题可以迎刃而解.又如在几何的学习中,会遇到大量的曲线与曲面,也离不开图形的配合. 传统的手工作图,往往费力耗时,效果也不尽理想.计算机恰恰弥补了这个不足,使你可以方便地指定各种视角、比例、明暗,从各个角度进行观察. 本实验通过对函数的图形表示和几个曲面(线)图形的介绍,一方面展示它们的特点,另一方面,也将就Matlab软件的作图功能作一个简单介绍.大家将会看到,Matlab的作图功能非常强大. 实验内容 数学分析中,特别是积分部分,我们接触了不少有趣的函数,由于其中有的不是一一对应的,用上面的方法无法画出它们的图像,这时就只能用参数了. 此外还有些图形只能用参数来画,比如空间曲线,在计算机上不接受“两个曲面的交线”这种表示,所以也只能用参数来实现. 用参数方式作图的关键在于找出合适的参数表示,尤其是不能有奇点,最好也不要用到开方.所以要找的参数最好是有几何意义的.当然这也不可一概而论,需要多积累经验. 实验步骤 1.做出下图所示的三维图形:

实验6多态性与虚函数

[实验目的] 1、了解多态性的概念; 2、了解虚函数的用途及使用方法; 3、了解纯虚函数和抽象类的概念和用法。 [实验要求] 给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。 [实验学时] 2学时。 [实验内容] 1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序] #include using namespace std; class Shape { public: virtual float area()const=0; virtual void display()const=0; }; class Circle:public Shape { public: Circle(double a):r(a){} virtual float area()const{return 3.14*r*r;} virtual void display()const { 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(); }

数学软件实验

实验1:MATHMATICA软件的安装、基本功能界面与帮助信息 一、实验目的 1.掌握MATHMATICA软件的安装技巧 2.了解基本功能界面 3.了解并掌握帮助信息的查询技巧 4.掌握基本命令的输入书写格式和输出格式 二、预备知识 1.MATHMATICA 5.0 软件的安装技巧 (1)首先进入安装盘的\mathmatica5\KEYGEN 目录,运行keygen (2) 进入安装盘的\mathmatica5\PC__8_3目录,运行setup (3) 待setup 执行完毕系统提示输入password时,按如下提示完成安装 Open the keygen. In the Euro section (bottom half)enter in any number in the license box (1 works fine)choose style 23 and press https://www.360docs.net/doc/d58868674.html,e that license number for the mathematica install.(ie: entering 1 generates a license of L0000-0001 )Change the keygen's math ID to match the one given by mathematica if needed.Press Generate. Copy paste that password. 2.基本功能界面 安装成功后,点击桌面上的MA THMA TICA图标即可进入MATHMA TICA的缺省界面 三.实验内容与要求 1、独立完成MA THMA TICA的安装 2、运行Mathematica,在Startup Palette 窗口 (1)点击Ten-minute Tutorial 进行10分钟的学习 (2)点击Help-Browser 了解帮助 3、完成下列练习 (1)利用两种寻求帮助的方式(?或Help-Browser)分别查找如下相关命令的信息 Int* ,Inte*, P* ,Plo*,So*,Sol*, Solve,DSlove, *Form,InputForm,FullForm Timeings,Pi In[2]:=?Int* { {Integer, Interpolation}, {IntegerDigits, InterpolationOrder}, {IntegerExponent, InterpolationPoints}, {IntegerLength, InterpolationPrecision}, {IntegerPart, Interpretation},

数学软件实验9

《数学软件应用》 实验 姓名: 学号: 实验9:二维、三维 随机游走 一、 实验目的 1. 掌握MATHMATICA 关于作图的基本命令 2. 掌握MATHMATICA 关于作图的基本技巧 3 认识作图程序设计初步 二、 预备知识 1、2维作图基本命令 (1) Line[{pt 1, pt 2, }] is a graphics primitive which represents a line joining a sequence of points. Point[coords ] is a graphics primitive that represents a point. (2) Graphics is displayed using Show . The following graphics primitives can be used: Circle x ,y ,r circle Disk x ,y ,r filled disk Line x 1,y 1 ,… line Point x ,y point Polygon x 1,y 1 ,… filled polygon PostScript "string " PostScript code to include verbatim Raster array array of gray levels RasterArray garray array of colored cells Rectangle xmin ,ymin , xmax ,ymax filled rectangle Text expr , x ,y text (3) Graphics3D[primitives , options ] represents a three-dimensional graphical image. Graphics3D is displayed using Show . The following graphics primitives can be used:

实验八 虚函数及应用

实验八虚函数及应用 一、实验目的 1.理解虚函数与运行时(动态)多态性之间的关系,掌握虚函数的定义及应用; 2.理解纯虚函数与抽象类的概念,掌握抽象类的定义及应用; 3.理解虚析构函数的概念及作用。 二、实验学时 课内实验:2课时课外练习:2课时 三本实验涉及的新知识 ㈠虚函数与动态多态性 在C++中,如果将基类与派生类的同名成员函数定义为虚函数,就可以定义一个基类指针,当基类指针指向基类对象时访问基类的成员函数,当基类指针指向派生类对象时访问派生类的成员函数,实现在运行时根据基类指针所指向的对象动态调用成员函数,实现动态多态性。换句话说,虚函数与派生类相结合,使C++能支持运行时(动态)多态性,实现在基类中定义派生类所拥有的通用“接口”,而在派生类中定义具体的实现方法,即“一个接口,多种方法”。 ㈡虚函数的定义 1.在基类中定义 在定义函数的前面加上“virtual ”。即: virtual 返回类型函数名(参数表) { …… } 2.在派生类中定义 函数的返回类型、函数名、参数的个数、参数类型及顺序必须与基类中的原型完全相同。 3.说明: ⑴在派生类中定义虚函数时,可用“virtual”也可不用“virtual”(最好都使用)。 ⑵虚函数在派生类中重新定义时,其原型必须与基类中相同。 ⑶必须用基类指针访问虚函数才能实现运行时(动态)多态性;当用普通成员函数的调用方法(即用圆点运算符)调用虚函数时,为静态调用; ⑷虚函数在自身类中必须声明为成员函数(不能为友元函数或静态成员函数),但在另一个类中可以声明为友元函数。 ⑸虚函数可以公有继承多次,其虚函数的特性不变。 ⑹构造函数不能定义为虚函数,但析构函数可以定义为虚函数。 ⑺虚函数与重载函数的关系 ①普通函数重载是通过参数类型或参数的个数不同实现的;重载一个虚函数时,其函数原型(返回类型、参数个数、类型及顺序)完全相同。 ②当重载的虚函数只有返回类型不同时,系统将给出错误信息;如果定义的虚函数只有函数名相同,而参数个数或类型不同时,则为普通函数重载。 ㈢纯虚函数与抽象类 1.纯虚函数定义 格式:

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

实验三虚函数与多态、纯虚函数 一.实验目的 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;

《专业统计软件应用》实验指导

《专业统计软件应用》 实验指导 一、实验基本要求 1.学生应根据首次上机实习时实验中心明确的任务和教师所提要求,迅速准备好并熟悉相应上机内容; 2.完成上机实习的全部任务; 3.每次实习之后,应及时总结上机完成任务情况,对未达到要求部分应在下次上机时完成,其中不清楚的地方多请教同学或老师; 4.按要求完成实习报告; 二、教材及相关资源 1、实验教材《SPSS19统计分析适用教材》邓维斌等电子工业出版社 2、相关教学资源(教材课件、数据文件等)请在http://172.22.4.2软件下载里面下载(文件名为:SPSS19.0教学资源)或ftp://172.22.4.2里下载“SPSS统计分析课件(全校任选课)19.0” 三、成绩考核办法 采用实习考勤、实习作业评价与撰写实习报告综合评分。 1.考勤上机表现(20%) ①迟到一次扣3分。 ②旷课一次扣5分。 ③在上机时间玩游戏扣5分。 ④3次以上(包括3次)缺席,本实验不予通过。 2 上机测试(50%) 3 实验报告(30%) (注:只撰写第4、5、7章的实验内容,实验报告务必于最后一次上机时交,凡不交报告者本课程将无学分) (1)封面要求 (2)、实验内容写作

(3)实验心得与体会 四、实验安排 4.1 时间安排 4.2每章实验题目 4.2.1第2章实验题目 1.以下是问卷调查表的其中三个问题,调查结果如表 2.11所示,请根据该调查表建立SPSS 数据文件,并录入问卷调查结果,SPSS文件保存为“data2-8.sav”。 (1)您的性别是男......1 女. (2) (2)您的家庭月收入大约是:(请包括所有工资、奖金、津贴等在内,以人民币为单位)单选 500-1000........11000-1999......22000-2999......33000-3999 (4) 4000-4999......55000-5999......66000-6999......77000-7999 (8) 8000-8999......99000-9999......1010000及以上 (11) (3)您的教育程度:(指您受过的最高或正在接受的教育程度)单选 没有受过正式教育/小学..........1初中............2高中/中专/技校 (3) 大专/大学非本科/高职高专......4大学本科......5研究生及以上.. (6) 表2.11 问卷调查结果1

相关文档
最新文档