c++类中的函数这两种写法哪个好?

比如有一个类TitleInfo存储一本书的信息,他的成员函数设置书名:
应该:

1.

void TitleInfo::SetTitle()
{
    cout << "请输入书名:";
    //检查输入有效性代码已经省略
    cin >> _book_title;
}

然后主函数直接调用

2.

void TitleInfo::SetTitle(string title)
{
    _book_title=tile;
}

然后再主函数里面检查输入有效性,直接传参数

这两种写法哪种更好?各有什么好处?

后者比较好,因为一般来说一个函数应该只干一件事。
第一个函数干了2件事。
干了2件事的后果就是,导致无论更改2件事的任何一件,都要修改这个函数。

比如说,你要把从键盘输入换成从文件输入,你还得修改SetTitle,导致写出来的函数不通用。