c++ - 使子类可以调用彼此的共享成员变量

标签 c++ polymorphism

我是 C++ 的新手,我在这方面遇到了麻烦。所以我正在尝试创建可以使用通用子类调用彼此字段的类。

基本上,我正在尝试制作一款游戏,其中包含一种通用类型和三种类型,它们之间存在优势/劣势。我真的只有 Java 方面的经验,将这种东西翻译成 C++ 对我来说并不合适

泛型分为三种类型:类型 1、类型 2、类型 3。

泛型需要具体

在泛型中有字段attack, defense, hitpoints

类型 1、2 和 3 都继承了这些字段。

我正在尝试在泛型类中创建一个虚函数:

virtual void attack(Generic* g);

问题是,当我尝试制作 type_1.attack(generic) 时,我想执行 g->hitpoints 以获得通用的生命值,但它似乎无法正常工作在 C++ 中。

此外,我知道我一定做错了什么,因为类型 1、2 和 3 都包含通用类型的 header ,但是如果我想在 main.cpp 中包含这 3 个 header ,它会给我一个错误分别声明通用 3 次。

我该怎么做?

抱歉,这是一个非常具体的问题,有点含糊。如果我需要澄清任何事情,请告诉我

编辑:这是我所说的基本设置

//在generic.h中

类通用{
 protected :
    整数生命值;
    强度;
    内部防御;
民众:
    虚拟虚空攻击(通用* g);
};

//type1.h
#include 'generic.h'
类 Type1:公共(public)通用{
    无效攻击(通用* g);
};

//在type1.cpp中
void Type1::attack(Generic*g) {
    g->hitpoints = strength - g->defense;
}

最佳答案

对象可以访问它自己的 protected 从基类继承的成员。但是一个对象不能访问另一个对象的 protected 成员。这就是 privateprotected 之间的区别 - private 成员只能由声明它们的类访问,但 protected 成员可以被声明类及其后代访问。不过,两者对于外部代码仍然是私有(private)的。

要执行您正在尝试的操作,hitpoints 需要public

关于c++ - 使子类可以调用彼此的共享成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337264/

相关文章:

c++ - 如何在 C++ 中使用 setprecision

c++ - 如何在其他 linux 平台上部署带有所有 dll 文件的 Qt 应用程序?

c++ - 创建一个使用模板创建类或子类对象的函数

oop - VB6 中的多态行为

c++ - 模板特化行为示例

c++ - 在 boost::graph 中访问 std::shared_ptr 的成员函数?

c++ - 将负数传递给 Getopt

c++ - 错误消息 'class::function' : illegal call of non-static member function

c++ - C++ 基类的成员真的需要是虚拟的才能被派生类覆盖吗?

C++ 对象被向上转换为基类;不能调用派生方法