从基类指针访问子类成员 C++

2023-11-27

我有一系列自定义类 Student 对象。 CourseStudent和ResearchStudent都继承自Student,并且Student的所有实例都是其中之一。

我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数。

问题是,因为这些函数没有重载,所以在 Student 中找不到它们,所以编译器会大惊小怪。

如果我有一个指向 Student 的指针,有没有办法获取指向该 Student 子类型的指针?我需要在这里进行某种假演员来解决编译时错误吗?


最好的办法是使用虚函数:

class Student
{
   // ...
   virtual void SpecificFunction() = 0; /* = 0 means it's abstract; it must be implemented by a subclass */
   // ...
};

class CourseStudent
{
    void SpecificFunction() { ... }
};

然后你可以这样做:

Student *student;
student->SpecificFunction();

一个(更糟糕的)替代方案可以是使用dynamic_cast:

Student *student;
CourseStudent *cs = dynamic_cast<CourseStudent *>(student);

if (cs) {
   /* student is a CourseStudent.. */
   cs->SpecificFunction();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从基类指针访问子类成员 C++ 的相关文章

  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • 根本无法让 phing 运行

    Mac OS X 10 7 当我运行时phing v我收到以下错误 Warning require once phing Project php failed to open stream No such file or directory
  • 如何在Windows 8中在线播放背景音乐

    在我的应用程序中 我使用 UI MediaElement 但是当我点击Windows键时 音乐就停止了 我尝试使用 MediaControl PlayPressed MediaControl PlayPressed MediaControl
  • 如何使用我的主题指定黑暗操作模式

    我知道有几个关于设置操作栏的上下文操作栏 ActionMode 部分样式的问题 但它们似乎并没有完全解决我所追求的问题 我使用带有浅色主题和深色操作栏的工具栏 工具栏看起来像我想要的 但操作模式看起来像常规的深色主题 我需要改变什么风格才能
  • 如何在 Android 应用程序中执行 SQLite 查询?

    我试图在我的 Android 数据库上使用此查询 但它不返回任何数据 我错过了什么吗 SQLiteDatabase db mDbHelper getReadableDatabase String select Select id title
  • 将两个不同的 servlet 映射到相同的 URL 模式

    我遇到了一个别人写的J2EE项目 当我来到web xml 有两个不同的 servlet 映射到同一 URL 模式 我想知道这种方法的目的 它究竟是如何运作的以及目的是什么 这是相关部分web xml
  • 延迟约束检查

    目前 在我们的数据库设计中 我们在两个实体之间存在循环引用 换句话说 我们在每个表中都有外键 它们引用彼此的主键 为了在这些表中插入记录 我们需要执行延迟约束检查 这在 SQL Server 2008 中可能吗 我知道 Oracle DDL
  • 在 Visual Studio C# 中创建具有动态选项卡数量的选项卡控件

    如何在 Visual Studio C 中创建具有动态选项卡数量的选项卡控件 我有一个带有表的数据库customers 我需要创建一个表单 显示带有客户姓氏首字母的选项卡 仅显示表中应有条目的首字母 每个选项卡都应包含一个具有相应客户的 D
  • 对于 API 级别 < 11,getCheckedItemCount() 的等效项是什么?

    我正在使用此方法来检查检查了列表上的多少个项目 但收到此错误 表明此方法不适用于任何早于 11 的 SDK API 级别 8 中的 this 相当于什么 接受的答案对我不起作用 总是返回 0 我不得不使用以下代码 public static
  • 如何获取 C 中动态创建的结构数组的长度?

    我目前正在尝试获取动态生成的数组的长度 它是一个结构数组 typedef struct my data unsigned int id double latitude double longitude unsigned int conten
  • Singleton 和 @Autowired 返回 NULL

    我有一个存储库管理器来管理我的存储库 我有 Autowired 来实例化我的属性 但它们始终为空 bean 在我的 xml 中配置正确 有什么理由吗 public class RepositoryManager private static
  • 测量 Android 应用程序花费的时间

    我是安卓新手 在我的应用程序中 我想跟踪其他应用程序 安装在设备上 的使用时间 在前台 是否可以 如果是的话怎么办 提前致谢 首先 这里需要知道什么是在前台运行的应用程序 您可以使用以下命令检测当前的前台 后台应用程序ActivityMan
  • 如何在 Swift 3 (XCode 8) 中从文本文件读取数据

    首先我想从我现在的情况说起 1 现状 我有一个文本文件 data rtf 我也尝试过并且愿意使用 plist 或任何其他格式来获得结果 我一直在尝试从此文件中读取任何数据 并在标签上显示该数据 我尝试过预填充文件 在读取文件之前保存到文件
  • 使用 Boto 读取 S3 中文件的一部分

    我正在尝试读取存储在 S3 中的 700MB 文件 然而我只需要位置 73 到 1024 之间的字节 我试图找到一个可用的解决方案 但未能成功 如果有人能帮助我 那将是一个很大的帮助 S3支持使用 Range HTTP 标头的 GET 请求
  • 在用户提交的数据中不转义 & 符号是否存在安全风险?

    在显示用户生成 提交的信息时 转义其他特殊字符但不更改与号是否存在安全风险 我想让我的用户自由输入 html 实体 十六进制和十进制特殊字符 而不会给我的清理程序增加不必要的复杂性 这完全取决于数据放入的上下文 在 HTML 中 表示纯文本
  • 我们可以用二叉搜索树来模拟堆操作吗?

    我想知道我们是否可以使用二叉搜索树来模拟堆操作 插入 查找最小值 删除最小值 即使用 BST 来完成相同的工作 这样做有什么好处吗 我们当然可以 但具有平衡的 BST 最小值是最左边的元素 最大值是最右边的元素 找到这些元素是O logn
  • 在通过 loadGeoJson() 加载的功能上创建 Infowindows

    如果这是基础知识 我深表歉意 但我的 JavaScript 知识非常有限 我正在制作一个地图 该地图加载我在 ArcGIS 中创建的 GeoJSON 数据 并使用 ogr2ogr 重新格式化为 GeoJSON 我已经加载了地图并显示了 Ge
  • 如何从特定 FPS 的视频中提取帧?

    我能够提取特定的帧test mp4使用以下代码创建文件 import cv2 def get frames cap cv2 VideoCapture test mp4 i 0 while cap isOpened ret frame cap
  • 如何在 Kotlin 中向 Gson 注册 InstanceCreator?

    我可以使用代码1来保存MutableList
  • 在浏览器中加载 ionic 项目时提示错误“localhost:8100 said gap_init:3”消息

    当我在任何页面代码中进行更改时 都会显示一条提示消息 localhost 8100说gap init 3 然后我单击 确定 按钮 另外显示 5 条消息 关闭浏览器并再次打开效果良好 但进行任何更改都会显示此提示 如何修复它 提前致谢提示错误
  • 从基类指针访问子类成员 C++

    我有一系列自定义类 Student 对象 CourseStudent和ResearchStudent都继承自Student 并且Student的所有实例都是其中之一 我有一个函数来遍历数组 确定每个学生的子类型 然后对它们调用特定于子类型的