gpt4 book ai didi

C++ 类方法继承

转载 作者:太空狗 更新时间:2023-10-29 21:45:01 25 4
gpt4 key购买 nike

我最近从 Java 过渡到 C++,我在弄清楚类继承的确切工作原理时遇到了一些困难。目前,我有 Weapon 类和 Minigun 类。 Minigun 继承了 Weapon 类,这意味着它应该具有 Weapon 定义的方法和变量。我的问题是我在 Weapon 中有一个名为 rate 的私有(private)常量 static int,以及一个返回整数的公共(public)方法,名为 getRate()getRate() 只是返回类中定义的速率变量。当 Minigun 扩展 Weapon 并且我在 Minigun 中设置速率时,getRate() 方法仍然返回常量来自 Weapon 类,即使它是在 Minigun 类上调用的。我认为它会像 Java 一样运行,并且继承的方法会使用 Minigun 中修改的变量。目前我必须执行以下操作;

Weapon.h

#ifndef __WEAPON__
#define __WEAPON__

class Weapon
{
public:
virtual int getRate()
{
return rate;
}
private:
const static int rate = 0;
};

#endif

Minigun.h

#include "Weapon.h"

#ifndef __WEAPON_MINIGUN__
#define __WEAPON_MINIGUN__

class Minigun: public Weapon
{
public:
int getRate(); // I have to define this here, and create it inside Minigun.cpp
private:
const static int rate = 30;
};

#endif

Minigun.cpp

#include "Minigun.h"

int Minigun::getRate() // Is there a way so I do not need to type this out for every class that extends Weapon?
{
return rate;
}

最佳答案

Weapon 实例会通过 getRate() 返回 Weapon::rate 的速率,而 Minigun 实例会返回 Minigun::rate 的速率。

因为方法 getRate() 是虚拟的 Weapon 指针或对 Minigun 实例的引用将返回 Minigun 的速率::速率

如果派生类中只有速率变量发生变化,则模板类比动态多态版本需要更少的编码。模板版本如下所示:

    template<int Rate = 0>
class Weapon
{
public:
int getRate() // no need for virtual anymore
{
return rate;
}
private:
const static int rate = Rate;
};

class Minigun: public Weapon<30> {};

关于C++ 类方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com