qt 自定义抽象类简单举例

在Qt中自定义一个抽象类通常涉及定义一个基类,该类包含至少一个纯虚函数,从而使其成为抽象类。以下是一个简单的例子,展示了如何创建一个自定义的抽象类及其派生类。

首先,我们定义一个名为Shape的抽象类,它有一个纯虚函数area(),用于计算形状的面积。然后,我们创建两个派生类CircleRectangle,它们分别实现了area()函数来计算圆和矩形的面积。

Shape.h

#ifndef SHAPE_H
#define SHAPE_H
class Shape {
public:
virtual ~Shape() {}
virtual double area() const = 0; // 纯虚函数,使得Shape成为抽象类
};
#endif // SHAPE_H

Circle.h

#ifndef CIRCLE_H
#define CIRCLE_H
#include "Shape.h"
class Circle : public Shape {
public:
Circle(double radius);
double area() const override; // 重写Shape类中的纯虚函数
private:
double radius;
};
#endif // CIRCLE_H

Circle.cpp

#include "Circle.h"
#include <cmath>
Circle::Circle(double radius) : radius(radius) {}
double Circle::area() const {
return M_PI * radius * radius;
}

Rectangle.h

#ifndef RECTANGLE_H
#define RECTANGLE_H
#include "Shape.h"
class Rectangle : public Shape {
public:
Rectangle(double width, double height);
double area() const override; // 重写Shape类中的纯虚函数
private:
double width, height;
};
#endif // RECTANGLE_H

Rectangle.cpp

#include "Rectangle.h"
Rectangle::Rectangle(double width, double height) : width(width), height(height) {}
double Rectangle::area() const {
return width * height;
}

在这个例子中,Shape是一个抽象类,因为它有一个纯虚函数area()CircleRectangle类都继承自Shape,并且都实现了area()函数,因此它们可以被实例化。你可以在主函数中创建CircleRectangle的对象,并调用它们的area()函数来计算面积。

main.cpp

#include <iostream>
#include "Circle.h"
#include "Rectangle.h"
int main() {
Circle circle(5.0); // 创建一个半径为5的圆
std::cout << "Circle area: " << circle.area() << std::endl; // 输出圆的面积
Rectangle rectangle(4.0, 6.0); // 创建一个4x6的矩形
std::cout << "Rectangle area: " << rectangle.area() << std::endl; // 输出矩形的面积
return 0;
}

这个简单的例子展示了如何在Qt(或任何C++环境)中定义和使用自定义的抽象类。请注意,虽然这个例子是在Qt环境中描述的,但它实际上并不依赖于Qt库,而是纯粹的C++代码。

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

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

相关文章

win10 A4000 下使用Xinference来进行大模型的推理测试

创建环境 conda remove --name xinference --all conda create --name xinference python3.10 conda activate xinference 安装&#xff1a; conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia pip install tiktoken sentence-transformer…

【QT】窗口MainWindow

目录 窗口的组成 菜单栏 图形化创建菜单栏 代码创建菜单栏 给菜单设置快捷键 添加子菜单 添加分割线 添加图标 创建menuBar的细节 工具栏 设置工具栏出现的初始位置&#xff08;上下左右&#xff09; 设置工具栏允许停靠的位置 设置不允许浮动 设置不允许移动…

提高使用安全,智慧校园在线用户功能概述

智慧校园系统融入了一个查看当前在线用户的功能&#xff0c;这一设计旨在为管理人员提供一个实时的窗口&#xff0c;洞悉校园平台的即时活跃情况&#xff0c;确保系统的高效运作与环境安全。通过这一功能&#xff0c;管理员能够一目了然地看到所有正活跃在平台上的用户群体&…

二叉树专题刷题

二叉树的层平均值 题目 637. 二叉树的层平均值 - 力扣&#xff08;LeetCode&#xff09; 解题思路 使用三个集合&#xff0c;sums集合存储每层的总和&#xff0c;count集合存储每层的节点数&#xff0c;averages存储每层的平均值。 这里要讲一下add方法和set方法的区别 ad…

windows运行库合集(windows必备运行库)

Windows运行库&#xff08;Windows Runtime&#xff0c;简称WinRT&#xff09;是微软为Windows 8及以上版本推出的一种新的应用程序框架&#xff0c;它采用了基于COM的API调用方式&#xff0c;并使用了新的应用程序打包和分发方式。 WinRT包含了大量的通用API&#xff0c;可以…

J026_统计投票人数

一、需求描述 统计投票人数 某个班级80名学生&#xff0c;现在需要组织秋游活动&#xff0c;班长提供了4个景点依次是&#xff08;A、B、C、D&#xff09;&#xff0c;每个学生只能选择一个景点&#xff0c;请统计出最终哪个景点想去的人数最多。 二、代码实现 package com…

JS的隐式转换

1.什么是JS的隐式转换 JavaScript中的隐式转换是指在运行过程中&#xff0c;代码自动将一个数据类型转换为另一个数据类型&#xff0c;而无需显式地调用转换函数。 原因 JavaScript是弱类型语言&#xff0c;这意味着它不像Java&#xff0c;C一样的强类型语言有预先确定的类型…

离线安装pip包

文章目录 离线机器安装需要的python包 离线机器安装需要的python包 本机做一台和实际的生产机器相同环境的虚拟机 在本机环境下下载离线包 pip3 download gunicorn -d /usr/local/gunicorn-package -i https://pypi.tuna.tsinghua.edu.cn/simple 将gunicorn-package下的文件…

【088】基于SpringBoot+Vue实现高校就业管理系统

系统介绍 基于SpringBootVue实现的高校就业管理系统 课程设计 大作业必备 基于SpringBootVue实现高校就业管理系统采用前后端分离的架构方式&#xff0c;系统分为管理员、企业、辅导员、学生四种角色&#xff0c;实现了用户登录、学生注册、商家注册、首页统计、个人信息管理、…

动手学深度学习(Pytorch版)代码实践 -注意力机制-Transformer

68Transformer 1. PositionWiseFFN 基于位置的前馈网络 原理&#xff1a;这是一个应用于每个位置的前馈神经网络。它使用相同的多层感知机&#xff08;MLP&#xff09;对序列中的每个位置独立进行变换。作用&#xff1a;对输入序列的每个位置独立地进行非线性变换&#xff0c…

备份及恢复Sonarqube服务数据

基础数据&#xff1a; 源数据机ip&#xff1a;192.*.53 测试机ip&#xff1a;192.*.65 Sonarqube访问地址&#xff1a;http://192.*.65:9000/ 账户名&#xff1a;admin 密码&#xff1a;123456 数据库postgres&#xff1a; 版本&#xff1a;PostgreSQL 15.3 一、数据备份…

AI写歌词,为你的音乐之旅添彩

在追求音乐梦想的道路上&#xff0c;每一个音符都承载着我们的情感与故事。而精彩的歌词&#xff0c;更是让这些音符焕发出耀眼光芒的关键。如今&#xff0c;AI 写词的出现&#xff0c;为我们的音乐之旅增添了绚丽的色彩。 “妙笔生词智能写歌词软件&#xff08;veve522&#…

JAVA自定义注释

interface 声明 package test; public interface InProgress { } InProgress public void calculateInterest(float amount, float rate) { } 带成员 public interface TODO {String value(); } InProgress //只有成员变量名有value时&#xff0c;值有给value赋值时可以这…

Spring Cloud Eureka

引入&#xff1a;远程调用时&#xff0c;url是写死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 解决思路&#xff1a; 比如&#xff08;医院&#xff0c;学校等&#xff09;机构的电话号码发生变化&#xff0c;就需要通知各个使⽤…

基于深度学习的问答系统

基于深度学习的问答系统是一种利用深度学习技术从文本数据中提取信息并回答用户提出的问题的技术。它在智能助手、客服系统、教育和医疗等领域有广泛应用。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 问答系统的主要任务和目标包括&#xff1a; 信息检索&#x…

Android14系统应用统一裁剪方案

Android14系统应用统一裁剪方案 背景 当前移除集成到系统里的应用,一般都是根据应用名,到各个mk文件里逐个在PRODUCT_PACKAGES中删除;这种方法,耗时而且不易管理集成到系统里的应用;需要有一个统一管理删除不需要应用的方案。 方案 参考PRODUCT_PACKAGES变量,添加PRO…

【PyTorch单点知识】自动求导机制的原理与实践

文章目录 0. 前言1. 自动求导的基本原理2. PyTorch中的自动求导2.1 创建计算图2.2 反向传播2.3 反向传播详解2.4 梯度清零2.5 定制自动求导 3. 代码实例&#xff1a;线性回归的自动求导4. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&…

游戏的无边框模式是什么?有啥用?

现在很多游戏的显示设置中&#xff0c;都有个比较特殊的选项“无边框”。小伙伴们如果尝试过&#xff0c;就会发现这个效果和全屏几乎一毛一样&#xff0c;于是就很欢快地用了起来&#xff0c;不过大家也许会发现&#xff0c;怎么和全屏比起来&#xff0c;似乎有点不够爽快&…

渲染引擎实践 - OSG引擎渲染一帧的过程

一&#xff1a;概述 经过前面两节的介绍&#xff0c;我们已经创建了窗口(OSG引擎窗口)和启动了渲染线程(OSG渲染线程)。当应用程序加载好模型数据以后&#xff0c;就开始正式的渲染了&#xff0c;那么本节分析下渲染一帧的过程&#xff0c;本文尽量做到简单&#xff0c;清晰&am…

uniapp编译成h5后接口请求参数变成[object object]

问题&#xff1a;uniapp编译成h5后接口请求参数变成[object object] 但是运行在开发者工具上没有一点问题 排查&#xff1a; 1&#xff1a;请求参数&#xff1a;看是否是在请求前就已经变成了[object object]了 结果&#xff1a; 一切正常 2&#xff1a;请求头&#xff1a;看…