递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2041|回复: 16
打印 上一主题 下一主题

[其它] 如何使用虚拟方法可覆盖重写父类虚函数

[复制链接]

250

主题

1807

帖子

7384

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7384
QQ
跳转到指定楼层
楼主
发表于 2025-5-18 16:44:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 沉默流星 于 2025-5-18 17:29 编辑

问题如下:
  1. #include <iostream>

  2. // 基类 ASD
  3. class ASD {
  4. public:
  5.     // 虚函数 add
  6.     virtual int add(int a, int b) {
  7.         return a + b;
  8.     }

  9.     // 虚析构函数(确保删除派生类对象时不会出现问题)
  10.     virtual ~ASD() {}
  11. };

  12. // 派生类 BB
  13. class BB : public ASD {
  14. public:
  15.     // 重写虚函数 add
  16.     int add(int a, int b) override {
  17.         return a + b + 10;  // 示例:在基类的基础上加10
  18.     }
  19. };

  20. int main() {
  21.     // 使用基类指针指向派生类对象
  22.     ASD* ptr = new BB();

  23.     // 调用重写的 add 函数
  24.     std::cout << "Result: " << ptr->add(5, 3) << std::endl;  // 输出应该是 18 (5+3+10)

  25.     // 释放内存
  26.     delete ptr;

  27.     return 0;
  28. }
复制代码
如何使用@虚拟方法 可覆盖 来重写父类虚函数,然后又如何调用.
说的是封装,使用别名无法使用@虚拟方法。
火山视窗封装视频教程
回复

使用道具 举报

459

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
43879
沙发
发表于 2025-5-18 17:03:48 | 只看该作者
就这样啊,和你给的案例差不多,设置虚拟方法标记就行了。


  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 类 类1
  3. {
  4.     方法 方法1 <公开 类型 = 整数 @虚拟方法 = 可覆盖>
  5.     参数 a <类型 = 整数>
  6.     参数 b <类型 = 整数>
  7.     {
  8.         返回(a+b)
  9.     }
  10. }

  11. 类 类2 <基础类 = 类1>
  12. {
  13.     方法 方法1 <公开 类型 = 整数 @虚拟方法 = 可覆盖>
  14.     参数 a <类型 = 整数>
  15.     参数 b <类型 = 整数>
  16.     {
  17.         返回 (父对象.方法1 (a, b) + 10)  // 调用基础类中的被覆盖虚拟方法

  18.     }
  19. }

复制代码
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

459

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
43879
板凳
发表于 2025-5-18 17:05:23 | 只看该作者
调用就更简单了,直接常规方式调用就行了。。

  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 我的主窗口_创建完毕 <接收事件 类型 = 整数>
  3. 参数 来源对象 <类型 = 我的主窗口>
  4. 参数 标记值 <类型 = 整数>
  5. {
  6.     变量 类 <类型 = 类2>
  7.     调试输出 (类.方法1 (1, 2))
  8.     返回 (0)
  9. }
复制代码
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

250

主题

1807

帖子

7384

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7384
QQ
地板
 楼主| 发表于 2025-5-18 17:13:51 | 只看该作者
创世魂 发表于 2025-5-18 17:05
调用就更简单了,直接常规方式调用就行了。。

我说的不是仿写,而是封装
火山视窗封装视频教程
回复

使用道具 举报

29

主题

2308

帖子

8270

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8270
5#
发表于 2025-5-18 17:39:16 | 只看该作者
本帖最后由 Xelloss0618 于 2025-5-18 17:41 编辑

设置输出名和 @视窗.后缀文本 "override"不过你说别名的话,这本来就无法封装的,别名是直接引用C++类,你就算要覆盖虚拟方法,也是C++代码那边把子类写好了再封装给火山。
回复

使用道具 举报

250

主题

1807

帖子

7384

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7384
QQ
6#
 楼主| 发表于 2025-5-18 17:43:18 | 只看该作者
Xelloss0618 发表于 2025-5-18 17:39
设置输出名和 @视窗.后缀文本 "override"不过你说别名的话,这本来就无法封装的,别名是直接引用C++类,你 ...

不使用别名,如何封装呢
火山视窗封装视频教程
回复

使用道具 举报

29

主题

2308

帖子

8270

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8270
7#
发表于 2025-5-18 17:47:08 | 只看该作者
沉默流星 发表于 2025-5-18 17:43
不使用别名,如何封装呢

上面说了,设置输出名
回复

使用道具 举报

250

主题

1807

帖子

7384

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7384
QQ
8#
 楼主| 发表于 2025-5-18 17:55:00 | 只看该作者
Xelloss0618 发表于 2025-5-18 17:47
上面说了,设置输出名

好像不行啊他需要返回值




6829ade8e4065.png (48.94 KB, 下载次数: 39)

6829ade8e4065.png
火山视窗封装视频教程
回复

使用道具 举报

29

主题

2308

帖子

8270

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8270
9#
发表于 2025-5-18 18:24:37 | 只看该作者
沉默流星 发表于 2025-5-18 17:55
好像不行啊他需要返回值

你没写return啊……还有禁止流程检查。
而且你这个完全不需要写输出名和后缀文本。
只有继承了父类,才需要写输出名,你可以参考 扩展对象类
回复

使用道具 举报

250

主题

1807

帖子

7384

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7384
QQ
10#
 楼主| 发表于 2025-5-18 18:31:38 | 只看该作者
Xelloss0618 发表于 2025-5-18 18:24
你没写return啊……还有禁止流程检查。
而且你这个完全不需要写输出名和后缀文本。
只有继承了父类,才需 ...

扩展对象类 不对啊.他继承自对象类。但对象类中没有展示内容函数。他怎么能加override





我加为啥不行呢.



火山视窗封装视频教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-6-7 01:25 , Processed in 0.105256 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表