c++ - 在 C++ 中创建派生类

标签 c++ derived-class

<分区>

所以我试图创建一个 Die 类和一个 LoadedDie 类,其中 Die 类是基类,而 LoadedDie 类是派生类。两个类之间的唯一区别是 LoadedDie 中的 roll 函数有 25% 的机会获得最高数字,而 Die 有 1/6 的机会。这是我第一次使用派生类,我似乎在尝试完成这项任务时遇到了很大的问题。有人可以向我解释它是如何工作的,并向我展示我将如何在我的类(class)中做到这一点(因为我是视觉学习者并且需要示例)。我知道我的基类 (Die) 在移动到我的 LoadedDie 之前进行了测试。

模具.cpp

#include<iostream>
#include <cstdlib>
using namespace std;

class Die{
    public:
        Die();
        Die(int numSide);
        virtual int roll() const;
        int rollTwoDice(Die d1, Die d2); 
        int side;
};

Die::Die():side(6){}

Die::Die(int numSide):side(numSide){}

int Die::roll() const{
    return rand() % side + 1;
}

int Die::rollTwoDice(Die d1, Die d2){
    return d1.roll()+d2.roll();
}

加载芯片.cpp

#include<iostream>
#include <cstdlib>
#include "Die.cpp"
using namespace std;

class LoadedDie: public Die{
    public:
        LoadedDie();
        LoadedDie(int numSide);
        virtual int loadedroll() const;
};

LoadedDie::LoadedDie():side(6){}

LoadedDie::LoadedDie(int numSide):side(numSide){}

int LoadedDie::loadedroll() const{
    if ((rand() % 2)+1) = 1){
        return side;    
    }
    return (rand() % (side-1)) + 1;
}

int LoadedDie::rollTwoDice(LoadedDie d1, LoadedDie d2){
    return d1.roll()+d2.roll();
}

我的 DieTester.cpp(只是一个测试上述类是否工作的主类):

#include "LoadedDie.cpp"
#include<iostream>
#include<time.h>
#include <stdlib.h> 
using namespace std;

int main(){

    srand(time(NULL));  

    Die d(6);
    LoadedDie dl(6);
    cout << d.roll()<<endl;
    cout<<"ld " << dl.roll()<<endl;
}

使用上面的类,我在运行 DieTester.cpp 时遇到此错误(如果有帮助的话):

In file included from DieTester.cpp:1:
LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie()’:
LoadedDie.cpp:13: error: class ‘LoadedDie’ does not have any field named ‘side’
LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie(int)’:
LoadedDie.cpp:15: error: class ‘LoadedDie’ does not have any field named ‘side’
LoadedDie.cpp: In member function ‘virtual int LoadedDie::loadedroll() const’:
LoadedDie.cpp:18: error: expected primary-expression before ‘=’ token
LoadedDie.cpp:18: error: expected ‘;’ before ‘)’ token

我认为这些错误是由于我没有正确派生类造成的。有人可以向我解释这是如何完成的吗?

最佳答案

虽然关于将代码拆分为头文件和代码文件的建议都是有效的(现在就这样做),但它们与剩余的错误和您的问题无关。让我们一一过一遍:

LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie()’:
LoadedDie.cpp:13: error: class ‘LoadedDie’ does not have any field named ‘side’

LoadedDie 确实没有这样的成员。它是Die的成员。您不会像那样在派生类中初始化基类的成员。相反,您必须像这样调用基类的构造函数:

LoadedDie::LoadedDie() : Die() { }

LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie(int)’:
LoadedDie.cpp:15: error: class ‘LoadedDie’ does not have any field named ‘side’

同样的问题。相同的解决方案:

LoadedDie::LoadedDie(int numSide) : Die(numSide) { }

请注意,您可以利用参数的默认值,只需编写一个构造函数而不是两个:

class Die {
public:
    Die(int numSide = 6);
    ....
}

if ((rand() % 2)+1) = 1){
LoadedDie.cpp: In member function ‘virtual int LoadedDie::loadedroll() const’:
LoadedDie.cpp:18: error: expected primary-expression before ‘=’ token
LoadedDie.cpp:18: error: expected ‘;’ before ‘)’ token

'=' 是赋值,而你等于'=='。您不能将 1 分配给 (rand() % 2)+1)。

关于c++ - 在 C++ 中创建派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023699/

相关文章:

subclass - JavaScript - 创建派生类

c++ - 如何使用for循环从包含不同派生类的基类数组初始化对象?

c++ - 信号和线程——好的还是坏的设计决策?

c++ - 非成员非友元函数语法

c++ - 错误 : Invalid base class C++

c++ - 带有模板基类的静态成员定义

c++赋值运算符=用派生类重载

c++ - QWebEngineView - 从资源加载 html

c++ - 使用 ImageMagick++ 捕获 X11 屏幕截图

c++ - 十进制转二进制