繁体   English   中英

打印语句的 function 是不好的编程习惯吗?

[英]Is it bad programming practice to have a function that prints statement?

我想知道 class 和 function 只在屏幕上打印 output 是否是糟糕的编程习惯?

用于理解目的的简单示例:学生 class 具有通常的设置和获取方法,但它还有一个名为void PrintStudentDetails();

是否应该这样主要完成:

cout << "Name: " << student.GetName() << endl;

cout << "Age: " << student.GetAge() << endl;

cout << "Gender: " << student.GetGender() << endl;

或者作为一个 object 在 main 中调用打印 function:

student.PrintStudentDetails();

请告诉我正确的编码实践。

精简版

重载插入运算符

长话短说版本

虽然只写入cout的 function 没有什么害处,但它更有用,而且不难编写,一个可以写入任何ostream的 function。

void Student::PrintStudentDetails(std::ostream & out) // pass in any out stream
{
    out << "Name: " << student.GetName() << '\n'
        << "Age: " << student.GetAge() << '\n'
        << "Gender: " << student.GetGender() << '\n';
}

注意:插入运算符可以链式。

旁注: std::endl是一个新行和一个 stream 刷新,而 stream 刷新可能非常昂贵。 通常,只有当您必须立即将信息推送到客户端或流的缓冲区已满时,您才需要刷新。 在大多数其他情况下,更喜欢使用'\n'endl

编写打印您的 class 的<<重载只是稍微困难一点,因此您可以anystream << myClassInstance; .

std::ostream & operator<<(std::ostream & out, // any outstream
                          const Student & student) // the object to print
{
    out << "Name: " << student.GetName() << '\n'
        << "Age: " << student.GetAge() << '\n'
        << "Gender: " << student.GetGender() << '\n';
    return out; // this is the magic that allows chaining
}

您现在可以

cout << myStudent;

注意:插入运算符通常实现为 class 的friend元,以便提供对private变量的轻松访问。

有关重载运算符的更多智慧,请阅读运算符重载的基本规则和习惯用法是什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM