三、参数初始化列表
类名(<类型1>参数1, < 类型2>参数2...): 属性1(参数1),属性2(参数2)
{
}
#include <iostream>
using namespace std;
class Animal
{
public:
//Animal 也可以无参数操作,但是c_n必须初始化
Animal(string kind,int age):a_kind(kind),a_age(age),c_n(4)
{
a_age=age;
a_age=89;
}
string a_kind;
int a_age;
const int c_n; //c_n必须初始化
};
void test01()
{
Animal a("dog",3);
cout<<a.a_kind<<" "<<a.a_age<<endl;
}
int main(int argc, char *argv[])
{
test01();
return 0;
}
●初始化列表与函数内部赋值的区别:
(1)初始化列表顾名思义是进行初始化操作,是早于赋值的一个操作,而且初始化只能有一次
A(int_n1,int_ n2):a _n1(_ _n1),a_ n2(_ n2),a _n1(3)
//a_ nl初始化了两次。
●内部赋值:
(2)赋值操作是在初始化之后进行的,可以对变量进行多次赋值.
A(int_ _n1, int_ n2)
{
a_ _n1=_n1;
a _n1 = 90; //合理多次赋值
}
内部赋值的代码:
#include <iostream>
using namespace std;
class obj1
{
public:
obj1()
{
cout << "no arg constructor" << endl;
}
obj1(int n1)
{
m_num = n1;
cout << "have arg cons" << endl;
}
int m_num;
};
class obj2
{
public:
obj2(): o1(5) //函数初始化
{
}
obj1 o1; //函数声明
};
int main()
{
obj2 o2;
cout << o2.o1.m_num << endl;
return 0;
}