递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

266

主题

1873

帖子

7578

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7578
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. }
复制代码
如何使用@虚拟方法 可覆盖 来重写父类虚函数,然后又如何调用.
说的是封装,使用别名无法使用@虚拟方法。
火山视窗封装视频教程
回复

使用道具 举报

460

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
44385
17#
发表于 2025-5-18 22:28:21 | 只看该作者
沉默流星 发表于 2025-5-18 18:46
看文档是,但具体如何整,没看明白

接口自带例子有,可以看看自带例子接口是怎么用的,吴总给了封装案例的。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

266

主题

1873

帖子

7578

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7578
QQ
16#
 楼主| 发表于 2025-5-18 19:03:45 | 只看该作者
hcwanz 发表于 2025-5-18 18:51
https://bbs.voldp.com/forum.php?mod=viewthread&tid=21779&highlight=%40%E6%8E%A5%E5%8F%A3
我在这里 ...

好的,我研究研究,感谢
火山视窗封装视频教程
回复

使用道具 举报

76

主题

1195

帖子

5393

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5393
15#
发表于 2025-5-18 18:51:38 | 只看该作者
沉默流星 发表于 2025-5-18 18:46
看文档是,但具体如何整,没看明白

https://bbs.voldp.com/forum.php? ... 0%E6%8E%A5%E5%8F%A3
我在这里面照着火山里写的例子说了一下
回复

使用道具 举报

266

主题

1873

帖子

7578

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7578
QQ
14#
 楼主| 发表于 2025-5-18 18:46:28 | 只看该作者
hcwanz 发表于 2025-5-18 18:41
我记的@接口 这个属性就是为了别名封装虚函数搞的吧

看文档是,但具体如何整,没看明白
火山视窗封装视频教程
回复

使用道具 举报

76

主题

1195

帖子

5393

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5393
13#
发表于 2025-5-18 18:41:59 | 只看该作者
我记的@接口 这个属性就是为了别名封装虚函数搞的吧
回复

使用道具 举报

266

主题

1873

帖子

7578

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7578
QQ
12#
 楼主| 发表于 2025-5-18 18:37:02 | 只看该作者
Xelloss0618 发表于 2025-5-18 18:35
你没看清楚,对象类是 CVolObject 的别名,CVolObject 里有 GetDumpString 的虚拟方法,所以能用输出名封 ...

这样啊,感谢X大解惑。
火山视窗封装视频教程
回复

使用道具 举报

29

主题

2367

帖子

8434

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8434
11#
发表于 2025-5-18 18:35:01 | 只看该作者
沉默流星 发表于 2025-5-18 18:31
扩展对象类 不对啊.他继承自对象类。但对象类中没有展示内容函数。他怎么能加override

你没看清楚,对象类是 CVolObject 的别名,CVolObject 里有 GetDumpString 的虚拟方法,所以能用输出名封装出来。
你的父类不是别名,自然不行。
回复

使用道具 举报

266

主题

1873

帖子

7578

积分

贵宾

Rank: 9Rank: 9Rank: 9

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

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





我加为啥不行呢.



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

使用道具 举报

29

主题

2367

帖子

8434

积分

核心用户

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 05:20 , Processed in 0.110982 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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