在方法中使用类的对象作为参数

Using object of class as an parametr in method

本文关键字:对象 参数 方法      更新时间:2023-10-16

>我有类堆栈的方法,它比较了这个类的2个对象:

bool comparison(T &stack) {
    if (size == stack.size)
        for (int i = 0; i < size; i++) {
            if (!this->stackPr[i].comparison(stack.stackPr[i]))
                return false;
        }
    else
        return false;
    return true;
}

并使用上课时间的方法:

bool comparison(Time &time) {
    if ((this->hours == time.hours) && (this->minutes == time.minutes) && (this->seconds == time.seconds))
        return true;
    return false;

当我尝试在main中使用这个comman时:

bool temp = stack3.comparison(stack4);

MVS 下划线 |stack4| 并向我显示错误:

a reference of type "Time &"(non-const qualified) cannot be initialized with a value of type Stack<Time>

我该如何处理这个问题?感谢您的回答:)

有类堆栈:

class Stack {
private:
T *stackPr;
int size;
int top;
public:
//----------------CONSTRUCTORS-----------------
Stack(int n) {
    if (n > 0)
        size = n;
    else
        size = 10;
    stackPr = new T[size];
    top = -1;
}
Stack() {
    size = 10;
    stackPr = new T[size];
    top = -1;
}
Stack(Stack &stack) {
    stackPr = new T[stack.size];
    size = stack.size;
    top = stack.top;
    for (int i = 0; i < size; i++)
        stackPr[i] = stack.stackPr[i];
}
Stack(T *objs, int sizeMass) {
    size = sizeMass;
    stackPr = new T[size];
    for (int i = 0; i < sizeMass; i++) {
        this->push(objs[i]);
    }
}
//----------------DESTRUCTOR-------------------
~Stack() {
    delete[] stackPr;
}
//-----------------METHODS---------------------
//Add element to stack
void push(T &element) {
    if (top == size - 1)
        cout << "nThere's no more place!!!n";
    else {
        top++;
        stackPr[top] = element;
        cout << "nElement was succesfully pushedn";
    }
}
//Read + Delete
T pop() {
    if (top == -1)
        cout << "nStack is emptyn";
    else {
        T temp = stackPr[top];
        stackPr[top] = 0;
        top--;
        cout << "nElement was succesfully poped and deletedn";
        return temp;
    }
}
//Read
T popup() {
    if (top == -1)
        cout << "nStack is emptyn";
    else {
        cout << "nElement was succesfully poppedn";
        return stackPr[top];
    }
}
//Comparison of 2 stacks
bool comparison(T &stack) {
    if (size == stack.size)
        for (int i = 0; i < size; i++) {
            if (!this->stackPr[i].comparison(stack.stackPr[i]))
                return false;
        }
    else
        return false;
    return true;
}
};

试试这个,在你的 Stack 类中

改变:

bool comparison(T &stack) {

为此:

bool comparison(Stack<T> &stack) {

首先,放弃这个comparison函数,它会阻碍你的代码,改用==

其次,在比较函数中使用const Stack<T>

最后,使用 auto 推断变量的类型。

下面是一个示例,显示了我刚刚编写的内容的基础知识:

#include <iostream>
using namespace std;
struct Time 
{
    bool operator==(const Time& time)
    {
        return true;// adjust it with your own needs.
    }
};
template<typename T>
struct Stack
{
    T val;
    Stack(T& val_): val(val_) {}
    bool operator==(const Stack<T>& stack)
    {
        return this->val == stack.val; // here is your business logic of comparison
    }
};
int main()
{
    Time t1;
    Time t2;
    Stack<Time> myStack1(t1);
    Stack<Time> myStack2(t2);
    auto temp = myStack1 == myStack2;
    cout << temp << endl;
    return 0;
}