![](/img/trans.png)
[英]Is typedef inside of a function body a bad programming practice?
[英]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.