关于构造函数《C++ Primer》(4th)中p369讲的不是很清楚,读起来很费劲。
构造函数初始化成员的两种方法:
1、使用构造函数的初始化列表进行初始化
格式:
classname(参数列表):
(初始化列表)
{
}
初始化列表格式: 成员名1(形参名1),成员名2(形参名2),成员名n(形参名n)
例子:
Person(string& nm, string& ar):
name(nm),addr(ar)
{
}
2、使用函数体初始化
格式:
classname(参数列表)
{
函数体内赋值
}
它和传统的函数差不多,个人感觉更容易理解,格式也更简单。
例子:
Person(string& nm, string& ar)
{
name=nm;
addr=ar;
}
============================================20130916补充==================================================
#include <iostream>
using namespace std;
struct Foo
{
Foo() { }
Foo(int) { }
void fun() { }
};
int main()
{
Foo a(10); //语句1
a.fun(); //语句2
Foo b(); //语句3
Foo b2; ///语句4
b.fun(); //语句5
return 0;
}
上面的代码中,语句5处将发生错误!
原因是语句3,编译器将这个语句当做函数声明,如果使用默认构造函数函数,正确的做法是语句4.