#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
int n2;
int n1;
public:
A() :n2(34), n1(n2+1) {}
void Print() {
cout << "n1:" << n1 << ", n2: " << n2 << endl;
}
};
int main()
{
A a;
a.Print();
getchar();
return 1;
}
对上面代码稍微做调整: 将n1和n2两个变量定义的顺序互换一下
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
int n1;
int n2;
public:
A() :n2(34), n1(n2+1) {}
void Print() {
cout << "n1:" << n1 << ", n2: " << n2 << endl;
}
};
int main()
{
A a;
a.Print();
getchar();
return 1;
}
打印结果:
由此可以总结: 构造函数中,变量初始化的顺序,是以变量定义的顺序来定的,而不是简单的以构造函数中变量出现的顺序来定的
还可以使用有参的构造函数:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
int n1;
int n2;
public:
A(int k1,int k2) :n2(k1), n1(k2) {}
void Print() {
cout << "n1:" << n1 << ", n2: " << n2 << endl;
}
};
int main()
{
A a(78,97);
a.Print();
getchar();
return 1;
}
打印结果:
下面对上面进行改造一下:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
int n1;
int n2;
public:
A(int k1) :n2(k1), n1(n2) {}
void Print() {
cout << "n1:" << n1 << ", n2: " << n2 << endl;
}
};
int main()
{
A a(115);
a.Print();
getchar();
return 1;
}
打印结果:
通过最后一个例子,再次证明,变量初始化的顺序是严格按照各个变量定义的先后顺序来的,而不是简单的依据各变量在构造函数中出现的先后顺序来定的
下面两种写法是一个意思:
写法一:
public:
A(int k1,int k2) {
n1 = k1;
n2 = k2;
}
写法二:
public:
A(int k1,int k2) :n1(k1),n2(k2){}
FR:海涛高软(hunk Xu)