04737_C++程序设计_第8章_多态性和虚函数
例8.1
分析下面程序的输出结果。
例8.2
分别使用指针和引用的display函数。
#include <iostream> using namespace std; const double PI = 3.14159; class Point
{
private:
double x, y;
public:
Point(double i, double j)
{
x = i;
y = j;
}
virtual double area()
{
return ;
}
}; class Circle :public Point
{
private:
double radius;
public:
Circle(double a, double b, double r) :Point(a, b)
{
radius = r;
}
double area()
{
return PI*radius*radius;
}
}; void display(Point *p)
{
cout << p->area() << endl;
} void display(Point&a)
{
cout << a.area() << endl;
} void main()
{
Point a(1.5, 6.7);
Circle c(1.5, 6.7, 2.5); Point *p = &c;
Point &rc = c; display(a);
display(p);
display(rc); system("pause");
};
例8.3
在构造函数和析构函数中调用虚函数。
#include <iostream> using namespace std; class A
{
public:
A()
{ }
virtual void func()
{
cout << "Constructing A" << endl;
}
~A()
{ }
virtual void fund()
{
cout << "Destructor A" << endl;
}
}; class B :public A
{
public:
B()
{
func();
}
void fun()
{
cout << "Come here and go...";
func();
}
~B()
{
fund();
}
}; class C :public B
{
public:
C()
{ }
void func()
{
cout << "Class C" << endl;
}
~C()
{
fund();
}
void fund()
{
cout << "Destructor C" << endl;
}
}; void main()
{
C c;
c.fun(); system("pause");
};
例8.5
多重继承使用虚函数。
#include <iostream> using namespace std; class A
{
public:
virtual void f()
{
cout << "Call A" << endl;
}
}; class B
{
public:
virtual void f()
{
cout << "Call B" << endl;//必须使用virtual声明
}
}; class C :public A, public B
{
public:
void f()//可以省略关键字virtual
{
cout << "Call C" << endl;
}
}; void main()
{
A *pa;
B *pb;
C *pc, c; pa = &c;
pb = &c;
pc = &c; pa->f();//输出Call C
pb->f();//输出Call C
pc->f();//输出Call C system("pause");
};
04737_C++程序设计_第8章_多态性和虚函数的更多相关文章
- ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...
- ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Deskto ...
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...
- cc38b_demo_C++_异常_(2)txwtech在异常中使用虚函数-多态
//cc38b_demo,21days_C++_异常_(2)txwtech20200121在异常中使用虚函数-多态 //--异常层次结构//*异常的类-创建自己的异常类//*异常派生-就是继承//*异 ...
- sdut 6-2 多态性与虚函数
6-2 多态性与虚函数 nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit1000ms Memory Limit ...
- C++学习之路—多态性与虚函数(二)纯虚函数与抽象类
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1 纯虚函数 在前面的博客中已经提到:有时 ...
- C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 多态性是面向对象程序设计的一个重要特征.顾名思义 ...
- C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了&quo ...
- C++学习7-面向对象编程基础(多态性与虚函数、 IO文件流操作)
多态 多态性是指对不同类的对象发出相同的消息将返回不同的行为,消息主要是指类的成员函数的调用,不同的行为是指不同的实现: 函数重载 函数重载是多态性的一种简单形式,它是指允许在相同的作用域内,相同的函 ...
- [转]C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接 ...
随机推荐
- SQL Server 数据库的自动选项
自动选项影响SQL Server 可能会自动进行的操作,所有的这些都是bool值,值为on 或off 1. auto_close: 当这个为on 时.数据库在最后一个用户退出后完全关闭,这样数据库就不 ...
- 【自学php】第三天 - 读写文件
这次的例子是把订单的数据保存起来,一般是用数据库来进行数据的存储最好,但是今天目的是为了学习读写文件,所以这次把数据存在文件里. 读写文件有一般有三个步骤: 1)打开文件.如果文件不存在,需要先创建它 ...
- SNMP_802.1
http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml http://www. ...
- C#句柄使用
原文:C#句柄使用 调用 API 函数 SendMessage 发送 WM_CLOSE 消息. DllImport("User32.dll",EntryPoint="Se ...
- ping-tool
https://serve.netsh.org/pub/ping-tool/ https://serve.netsh.org/pub/ipv4-hosts/
- 高效搭建Spark全然分布式集群
写在前面一: 本文具体总结Spark分布式集群的安装步骤,帮助想要学习Spark的技术爱好者高速搭建Spark的学习研究环境. 写在前面二: 使用软件说明 约定,Spark相关软件存放文件夹:/usr ...
- C++Primer 中间Sales_items.h头文件
#ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string> class Sale ...
- node.js(七) 子进程 child_process模块
众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...
- android webview点击返回键返回上一级activity
android webview点击返回键返回上一个activity @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...
- 在node.js中使用ejs的demo 第五篇
先说明一下我的项目的目录解构: 本项目中渲染的时候都是通过在index.js页面里面,来使用index.ejs的,首先引用必须的模块: var express = require('express') ...