HW似乎太容易了 - 将等价运算符重载为成员和非成员函数

时间:2014-07-17 23:45:32

标签: c++ dynamic operator-overloading cstring equivalence

赋值是创建一个实现动态cstring(以null结尾的char数组)的类。默认构造函数应该创建一个空数组,并且还应该有一个重载的构造函数,它创建一个大小为n的数组。还应该是一个将数组增大到更大的函数(他说这应该在类中,但我们不会在以后的任务中使用它)。我们还应该创建这个类的两个版本。在一个版本中,我们将等效运算符作为成员函数重载,在第二个版本中,我们将等效运算符作为非成员函数重载。

对我来说有点奇怪,因为这似乎很容易。

对于成员版本,如果两个班级大小相等,我将其设置为返回true。

bool CSTR::operator ==(const CSTR & rhs) {

    return (size == rhs.size);
}

对于非成员版本,我刚创建了一个成员函数,将其大小作为整数返回,然后在运算符重载时进行比较。

bool operator ==(const CSTR2 & CSTR2_1, const CSTR2 & CSTR2_2) {

    return (CSTR2_1.getSize() == CSTR2_2.getSize());
}

我有点害怕在没有任何外部输入的情况下将其打开,因为与我们在课堂上经历的所有内容相比,我的解决方案似乎过于简单。我知道我们将扩展这个程序以便以后的任务,但是如果你们中的任何人看到我在这里缺少的东西,那么一些输入将是非常棒的。

以下是我尝试用来比较cstring的代码。注意:赋值说明中没有任何内容说明了如何在cstrings中输入值。

#include "CSTR.h"
#include <cstring>
using namespace std;


class CSTR {
    public:
        CSTR();
        CSTR(unsigned int n);
        ~CSTR();


        bool operator ==(const CSTR & rhs);
    private:
        unsigned int size;
        char *elems;

        bool grow(unsigned int newSize);
};

=================================

CSTR::CSTR() {

    size = 0;
    elems = new char [0];
}

CSTR::CSTR(unsigned int n) {
    if (n > 0) {
        size = n;
        elems = new char [size];
}
    else {
        size = 0;
        elems = new char [0];
    }
}

CSTR::~CSTR() {

    delete [] elems;
}

bool CSTR::operator ==(const CSTR & rhs) {

    return ((elems == rhs.elems) == 0);
}

我已经初始化了两个不同大小的CSTR对象,当我测试等效时,它返回它们是相等的。

0 个答案:

没有答案