因此,在我的程序中,我有一些类-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()
。