因此,在我的程序中,我有一些类-Button,Window和WindowButton。按钮仅包含文本,按钮的Window-和坐标(x,y),WindowButton包含窗口。
在WindowButton中,我像这样重载了<

ostream& operator<<(ostream& out, WindowButton& ref)
{
    ref.print();
    return out;
}

打印功能如下所示:
void WindowButton::print()
{
    theWindow->print();
}

和窗口打印功能一样,在窗口类中:
void Window::print()
{
    char* buttonText = button->getText();
    char* theText = new char[strlen(buttonText)+1];
    strcpy(theText, buttonText);
    cout << endl << "Window with coordinates (" << this->coord.x << "," << this->coord.y << ") , and button text \"" << theText << "\"" << endl;
}

在主要方面:
WindowButton *test = new WindowButton();
cout << endl << test;
test->print();

最后一行提供正确的输出,但第二行仅提供内存地址。我究竟做错了什么?一切都应该正常工作,因为test-> print();工作正常。

最佳答案

您正在传递一个指向运算符<

cout << endl << *test;

您也可以做到:
ostream& operator<<(ostream& out, const WindowButton& ref){

假设打印实际上没有修改。

但是,更大的问题是,为什么要使用cout ostream来触发打印到theWindow-这些看上去(尽管不是)逻辑上断开的进程。您可以将给定的流传递到Window::print:
void Window::print(ostream& stream) {

并使用该流代替cout。这样可以避免将cout硬编码为Window::print()

08-16 09:58