C ++重载函数运算符和继承,无法在子类函数中正确使用它

时间:2014-05-23 07:19:28

标签: c++ inheritance operator-overloading

我是学生,这是我的第一个学期用c ++,所以我提前为任何草率的代码道歉。 我需要有关操作重载的帮助,特别是函数operator()和继承。我已经在网上搜索信息无济于事。 我想做什么;我在类RandomInt中重载了函数operation(),我现在正试图从继承的类BankAcct访问它,特别是我试图从公共函数中访问它。 我删除了所有注释以缩短代码。向下滚动到bankacct.cpp以查看需要更正的代码。 我有一个工作的randomInt.cpp和randomInt.h文件

randomInt.h

#include <iostream>
#include <cstdlib>
#include <sstream>

using namespace std;

#ifndef RANDOMINT_H
#define RANDOMINT_H

class RandomInt {
    public:

        RandomInt();

        RandomInt(int ia, int ib);

        int get_random_int();

        int operator()();

        int operator()(int num_b);

        int operator()(int num_a, int num_b);

    private: 
        int a , b, randomInt;
};
#endif

和randomInt.cpp

#include "randomInt.h"

using namespace std;

RandomInt::RandomInt(){
    a = 1000; 
    b = 9999;
    randomInt = 0;
}

RandomInt::RandomInt(int ia, int ib){
    a = ia; 
    b = ib;
    randomInt = 0;
}

int RandomInt::get_random_int(){
    return randomInt;
}

int RandomInt::operator()(){
    return randomInt = a + rand() % (b - a + 1);
}

int RandomInt::operator()(int num_b){
    return randomInt = a + rand() % (num_b - a + 1);
}

int RandomInt::operator()(int num_a, int num_b){
    return randomInt = num_a + rand() % (num_b - num_a + 1);
}

现在我已经实现了这些就好了。

现在以下是正在编译并按照我想要的方式工作,但我确信有更好的方法。

#include <iostream>
#include <sstream>
#include <string>
#include "randomInt.h"

using namespace std;

#ifndef BANKACCT_H
#define BANKACCT_H

class BankAcct : public RandomInt { 
    public:

        BankAcct();

        string get_pinCode();        

        string get_BSB();

        string int_to_string(int integer); 

    private: 
        string BSB;
        string pinCode;
        void set_pinCode();
};
#endif

和bankacct.cpp文件

#include "bankacct.h"
#include "randomInt.h"

using namespace std;

BankAcct::BankAcct(){
    BSB = "324-001";
}

string BankAcct::get_pinCode(){
    set_pinCode();
    return pinCode;
}

string BankAcct::get_BSB(){
    return BSB;
}

string BankAcct::int_to_string(int integer) {
    stringstream out;
    out << integer;  
    return out.str();
}

void BankAcct::set_pinCode(){
    // THIS IS WHERE I BELIEVE THE ISSUE IS.
    RandomInt R;
    int code = R();
    pinCode = int_to_string(code); 
}

我已经初始化了一个类对象,以使其工作在我过去的作业中,我使用继承,我可以简单地调用一个继承的类函数。有谁可以帮助我吗?或提供正确的语法。

然后我按照以下方式编译来检查。

#include <iostream>
#include <ctime>
#include "bankacct.h"
#include "randomInt.h"

using namespace std;

int main() {
srand(time(0));
BankAcct newAcct;

    for (int i = 0; i < 10; i++){
        cout << newAcct.get_pinCode() << endl;
        cout << newAcct.get_BSB() << endl;
    }

    return 0;
}

记住它按预期工作但我不明白为什么我应该像我一样制作一个类对象。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

除了RandomInt BankAcct的不必要的继承之外,使用类没有任何问题。您只需使用class BankAcct {即可删除继承。

您的代码运行正常,并且已声明类RandomInt可以轻松设置随机数变量。

关于继承,您说您之前使用过函数名来访问基类的函数。在继承类的函数中,您只能为函数而不是运算符执行此操作,因为您不能简单地调用int code = ();,因为这没有任何意义。

当继承的类在基类上扩展时,继承非常有用。我想建议this link来表明继承的优势。在您的示例中,BankAcct只使用RandomInt而不是RandomInt的扩展名,因此不需要继承。