C++虚函数学习

VC6新建一个单文档工程;

添加一个一般类;

生成的Shape.cpp保持不变;

#include "Shape.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//
// Construction/Destruction
//Shape::Shape()
{}Shape::~Shape()
{}

Shape.h如下;area()函数是自己添加,其他代码是生成;area()函数前面有关键字virtual,这是一个虚函数,函数体简单直接返回0;继承类可以重写area()函数;

#if !defined(AFX_SHAPE_H__1484D4F4_EA07_45FE_9094_2BAF51F73303__INCLUDED_)
#define AFX_SHAPE_H__1484D4F4_EA07_45FE_9094_2BAF51F73303__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class Shape  
{
public:Shape();virtual ~Shape();virtual double area() const {return 0;}};#endif // !defined(AFX_SHAPE_H__1484D4F4_EA07_45FE_9094_2BAF51F73303__INCLUDED_)

 从Shape类继承一个MyRect类,公共继承;

 

 在生成代码基础上添加一些,MyRect.h如下;

#if !defined(AFX_MYRECT_H__8805CF13_2433_46BD_9B75_54E096BAC9FE__INCLUDED_)
#define AFX_MYRECT_H__8805CF13_2433_46BD_9B75_54E096BAC9FE__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "Shape.h"class MyRect : public Shape  
{
private:double width, height;public:MyRect(double w, double h);virtual ~MyRect();virtual double area() const {return width * height;}};#endif // !defined(AFX_MYRECT_H__8805CF13_2433_46BD_9B75_54E096BAC9FE__INCLUDED_)

MyRect.cpp如下;

#include "stdafx.h"
#include "vtest.h"
#include "MyRect.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//
// Construction/Destruction
//MyRect::MyRect(double w, double h)
{width = w;height = h;
}MyRect::~MyRect()
{}

    MyRect类具有成员属性width和height,在构造函数中进行初始化;重写了基类Shape类的area()函数,返回width*height;

在视类cpp文件包含 #include "MyRect.h";

在OnDraw()函数使用前面的类,输出面积;

void CVtestView::OnDraw(CDC* pDC)
{CVtestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;Shape * pshp = new MyRect(3, 4);str1.Format("Area: %g", pshp->area());pDC->TextOut(50, 50, str1);
}

你也可以从Shape继承出圆形类,重写area()计算圆的面积;这就实现了多态;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于C/S架构工作原理序号工作步骤和理论的区别

基于C/S架构工作原理序号工作步骤和理论的区别 SSH 概念 对称加密linux 系统加密,就是加密和揭秘都是使用同一套密钥。 非对称加密有两个密钥:“私钥”和“公钥”。私钥加密后的密文,只能通过对应的公钥进行揭秘。而通过私钥推理出公钥的…

MyBatis 的架构

MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架,可以将 SQL 语句和 Java 代码进行分离,通过 XML 或注解的方式配置 SQL 语句并执行,从而实现数据访问的功能。MyBatis 的架构包括以下几个部分: SqlSessionFactory&#xff…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片(Shards)2.2、副本(Replicas)2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

CAD2021安装教程适合新手小白【附安装包和手册】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载文件二、使用步骤1.安装软件前,断开电脑网络(拔掉网线、关闭WIFI)2、鼠标右击【AutoCAD2021(64bit)】压缩包选择【解…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么? 2.为什么需要docker? 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images(镜像) Cont…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏(1) 菜单栏 Burp(2) 菜单栏 project(3) 菜单栏 Intruder(4) 菜单栏 Repeater(5&#x…

【PHP面试题44】PHP5的版本和PHP7之间有哪些区别

文章目录 一、前言二、底层调整2.1性能提升2.2 新的引擎2.3 数据类型改进2.4 错误处理改进2.5 语言特性增加 三、应用层差异3.1 兼容性3.2 类和方法改进3.3 错误处理机制3.4 性能优化3.5 新的扩展支持 四、一些语法糖示例4.1 标量类型声明示例4.2 新增了Spaceship操作符&#x…

【Spring】使用注解读取和存储Bean对象

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,本期给大家带来的是: 将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean …

数据库基本操作--------MySQL 索引

目录 一、MySQL 索引 1.索引的概念 2.索引的作用 3.创建索引的原则依据 4.索引的分类和创建 (1)普通索引 ●直接创建索引 (2)唯一索引 (3)主键索引 ●创…

Java InetAddress类

【InetAddress类】 【相关方法】 【使用方法实例】 【代码结果】

leetcode-541. 反转字符串 II

leetcode-541. 反转字符串 II 文章目录 leetcode-541. 反转字符串 II一.题目描述二.第1次提交(for循环,std::reverse)三.第2次提交四.第3次提交五.第4次提交六.代码随想录解答一七.代码随想录解答二八.代码随想录解答三 一.题目描述 二.第1次提交(for循环&#xff0…