gpt4 book ai didi

c++ - 重载 << 运算符不起作用;仍在打印对象地址

转载 作者:行者123 更新时间:2023-11-30 00:54:00 24 4
gpt4 key购买 nike

我正在尝试重载流运算符 <<但它仍然只是打印对象地址,而不是像我在重载函数定义中那样打印对象信息。这是我的代码,花了很多时间尝试我可以在网上找到的每个示例,但没有任何效果。请帮助减轻我的一些压力!谢谢。

区间.h:

#ifndef INTERVAL_H
#define INTERVAL_H
#include <string>
#include <iostream>
#include <assert.h>

using namespace std;

class Interval {
public:
long start;
long end;

// Constructor
Interval(long, long);

// Deconstructor
// Virtual to make sure that it calls the correct destructor
virtual ~Interval();

bool operator==(const Interval &other) const;
bool operator!=(const Interval &other) const;
bool operator<(const Interval &other) const;
bool operator<=(const Interval &other) const;
bool operator>(const Interval &other) const;
bool operator>=(const Interval &other) const;
friend ostream& operator<<(ostream& os, const Interval &i);

};
#endif

间隔.cpp:

#include "Interval.h"
#include <iostream>
#include <string>

using namespace std;

Interval::Interval(long a, long b){
// Assert that start is less than the end
assert(a < b);
start = a;
end = b;
}

// Deconstructor
Interval::~Interval(){
}

bool Interval::operator==(const Interval &other) const{
// Return true if both start and end are equal to other's
if(start == other.start && end == other.end){
return true;
}else{
return false;
}
}

bool Interval::operator!=(const Interval &other) const{
// Return true(not equal) if either the start or end are different
if(start != other.start || end != other.end){
return true;
}else{
return false;
}
}
bool Interval::operator<=(const Interval &other) const{
// Return true if the start is less than or equal other's start
if(start <= other.start){
return true;
}
}

bool Interval::operator>(const Interval &other) const{
// Return true if the end is greater than other's end
if(end > other.end){
return true;
}
}

bool Interval::operator>=(const Interval &other) const{
// Return true if the end is greater than or equal to other's end
if(end >= other.end){
return true;
}
}


bool Interval::operator<(const Interval &other) const{
// Return true if the start is less than other's
if(start < other.start){
return true;
}
}

ostream& operator<<(ostream& os, const Interval &i){

os << "Interval[" << i.start << ", " << i.end << "]" << endl;
return os;
}

int main(void){
Interval *test = new Interval(10,1000);
cout << test << endl;
cout << "test" << endl;
}

最佳答案

Interval* 是一个指针。您只是在输出地址。

尝试取消引用指针:

cout << *test << endl;

或者试试这个:

Interval test(10, 1000);   // not a pointer.
cout << test << endl;

关于c++ - 重载 << 运算符不起作用;仍在打印对象地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com