沉默流星 发表于 2025-5-18 16:44:27

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

本帖最后由 沉默流星 于 2025-5-18 17:29 编辑

问题如下:
#include <iostream>

// 基类 ASD
class ASD {
public:
    // 虚函数 add
    virtual int add(int a, int b) {
      return a + b;
    }

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

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

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

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

    // 释放内存
    delete ptr;

    return 0;
}如何使用@虚拟方法 可覆盖 来重写父类虚函数,然后又如何调用.
说的是封装,使用别名无法使用@虚拟方法。

创世魂 发表于 2025-5-18 17:03:48

就这样啊,和你给的案例差不多,设置虚拟方法标记就行了。


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

类 类1
{
    方法 方法1 <公开 类型 = 整数 @虚拟方法 = 可覆盖>
    参数 a <类型 = 整数>
    参数 b <类型 = 整数>
    {
      返回(a+b)
    }
}

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

    }
}

创世魂 发表于 2025-5-18 17:05:23

调用就更简单了,直接常规方式调用就行了。。

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

方法 我的主窗口_创建完毕 <接收事件 类型 = 整数>
参数 来源对象 <类型 = 我的主窗口>
参数 标记值 <类型 = 整数>
{
    变量 类 <类型 = 类2>
    调试输出 (类.方法1 (1, 2))
    返回 (0)
}

沉默流星 发表于 2025-5-18 17:13:51

创世魂 发表于 2025-5-18 17:05
调用就更简单了,直接常规方式调用就行了。。

我说的不是仿写,而是封装

Xelloss0618 发表于 2025-5-18 17:39:16

本帖最后由 Xelloss0618 于 2025-5-18 17:41 编辑

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

沉默流星 发表于 2025-5-18 17:43:18

Xelloss0618 发表于 2025-5-18 17:39
设置输出名和 @视窗.后缀文本 "override"不过你说别名的话,这本来就无法封装的,别名是直接引用C++类,你 ...

不使用别名,如何封装呢

Xelloss0618 发表于 2025-5-18 17:47:08

沉默流星 发表于 2025-5-18 17:43
不使用别名,如何封装呢

上面说了,设置输出名

沉默流星 发表于 2025-5-18 17:55:00

Xelloss0618 发表于 2025-5-18 17:47
上面说了,设置输出名

好像不行啊他需要返回值




Xelloss0618 发表于 2025-5-18 18:24:37

沉默流星 发表于 2025-5-18 17:55
好像不行啊他需要返回值

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

沉默流星 发表于 2025-5-18 18:31:38

Xelloss0618 发表于 2025-5-18 18:24
你没写return啊……还有禁止流程检查。
而且你这个完全不需要写输出名和后缀文本。
只有继承了父类,才需 ...

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




static/image/hrline/1.gif
我加为啥不行呢.



页: [1] 2
查看完整版本: 如何使用虚拟方法可覆盖重写父类虚函数