Posted on 2011-09-22 00:01
hoshelly 阅读(2191)
评论(0) 编辑 收藏 引用 所属分类:
C++
构造函数是什么?看下面几行代码:
class GradeBook
{
public:
void setCourseName(string name)
{
courseName=name;
}
string getCourseName()
{
return courseName;
}
GradeBook myGradeBook;
cout<<"Initial course name is: "<<myGradeBook.getCourseName()<<endl;
}
这几行代码中,定义一个类GradeBook,成员访问说明符public表示在这个符号之下的函数,函数都是公共可相互被调用的。创建GradeBook类的对象时(对象可以这样创建:GradeBook myGradeBook; 这里myGradeBook就是类的对象 ),该对象的数据成员courseName被初始化为默认的空串。事实上,我们可用定义一个构造函数,用于类对象创建时的初始化。
构造函数是一种特殊的成员函数,定义时必须与类同名。它和其他成员函数的一个重大差别是构造函数不能返回值,通常构造函数声明为public。
请看一个实例:
1 #include<iostream>
2 #include<string>
3 using namespace std;
4
5 class GradeBook //定义类
6 {
7 public:
8 GradeBook(string name)//定义了GradeBook类的一个构造函数,有一个string形参name,与下面的形参name名字相同,但互不干扰
9 {
10 setCourseName(name);//调用函数赋值,构造函数的好处是:只是简单调用,要改变时只需对被调用函数进行修改
11 }
12
13 void setCourseName(string name)//这个函数的形参为name
14 {
15 courseName=name;
16 }
17 string getCourseName()
18 {
19 return courseName;
20 }
21
22 void displayMessage()
23 {
24 cout<<"Welcome to the grade book for\n"<<getCourseName() //下面的main()函数中,没有调用getCourseName()函数
25 <<"!"<<endl;
26 }
27 private: // 私有的,在这个成员访问说明符之后声明的变量或者函数,只可以被声明它们的类的成员函数所访问
28 string courseName;
29 };
30
31 int main()
32 {
33 GradeBook gradeBook1("CS101 Introduction to C++ Programming"); //创建类的对象,并把实参赋予形参name
34 GradeBook gradeBook2("CS102 Data Structures in C++");
35
36 cout<<"gradeBook1 created for course: "<<gradeBook1.getCourseName() //调用类的成员函数getCourseName(),初始化类的对象
37 <<"\ngradeBook2 created for course: "<<gradeBook2.getCourseName()<<endl;
38 }
39
40
PS:1)为类提供默认构造函数的两种方法:
①编译器隐式地在没有定义构造函数的类中创建一个默认的构造函数,这样的默认构造函数不初始化类的数据成员,而是调用其他类的对象的每个数据成员的默认构造函数。没有初始化的变量通常包含“垃圾”值。
②程序员显式定义一个不接受实参的构造函数。
2)除非没有必要初始化类的数据成员(几乎不可能),否则请提供构造函数,这样可以保证当类的每一个新对象被创建时,类的数据成员都用有意义的值进行了初始化。