class GradeBook
{
public:
GradeBook(string name)
{
setCourseName(name);//调用函数赋值,构造函数的好处是:只是简单调用,要改变时只需对被调用函数进行修改,这句话怎么理解?为什么这样就初始化了?
}
void setCourseName(string name)
{courseName=name; }
string getCourseName()
{
return courseName;
}
void displayMessage()
{
cout<<"Welcome to the grade book for\n"<<getCourseName() <<"!"<<endl;
}
private: string courseName;
};
当你新建一个对象时,GradeBook a;或者GradeBook a("abc");编译器就会自动调用构造函数进行初始化。前者是系统默认的,当你未定义构造函数时,系统就调用默认的构造函数:GradeBook() ;后者则是调用你自己建立的构造函数。你可以利用重载建立N个不同的构造函数。
构造函数是新建对象时必然触发的,不能自己控制何时使用,或者不用构造函数。
构造函数比赋值函数好,因为任何对象建立时不给于初始化,就是一种安全隐患,比你先建立再赋值要好多了。
构造函数目的在于初始化,所以写构造函数时尽量简单,不要把多余的功能写进里面,不然会造成过于复杂,影响程序可读性。
————————————
你的构造函数里,简单调用了一个set方法来进行初始化,这样有几个好处:
1、使用类内置的方法更安全,不会影响到整个构造函数。比如我类有2个成员:string name,int no;
GradeBook(string name,int no)如果我不仅要设置name还要有其他的功能(跟name有关)就可以直接修改,setName方法不必影响到no的初始化,整个构造函数也没有其他影响
2、通过调用set方法来赋值,使得程序结构更清晰,一看就知道这段程序什么意思。
不过缺点就是太繁琐,一般直接赋值,或者C++的方法
GradeBook(string name,int no):name(name),no(no){}用这种set方法整理程序结构是重构的常用方法,不过一般构造函数中不常用。
和楼上意见比较一致就是在传递参数的时候多用引用,java中虽然没有显示的引用传递,但对类对象都是以引用传递的,所以一般喜欢这样写。C++中要显示使用引用,可以节省大类型的拷贝。
GradeBook(const string& name,const int& no):name(name),no(no){}