C++ 成员变量的初始化与构造函数

<pre name="code" class="cpp"># include<iostream>
using namespace std;
class demo
{
public:
	demo(){x=0;cout<<"demo的默认构造函数!"<<x<<endl;}
	demo(int i){x=i;cout<<"demo的带一个参数的构造函数!"<<x<<endl;}
	~demo(){cout<<"demo的默认析构函数!"<<x<<endl;}
	int get(){return x;}
	void set(int i){x=i;}
private:
	int x;
};
class rectangel
{
public:
	rectangel(){x=1000;cout<<"rectangel的默认构造函数!"<<x<<endl;}
	rectangel(int i,int j,int k):x(i),width(j),length(k)
		//由于有两个demo类的对象,因此调用了两次带一个参数的构造函数
		//rectangel(100,200,300);会把100、200、300的一一传递给i、j、k.但是其构造顺序是按着私有成员变量的顺序输出的,先输出length之后是width,并不是按着初始化列表。
		//构造函数的初始化顺序是按着成员列表的顺序进行的。
	{
		cout<<"rectangel的带三个参数的构造函数!"<<"长方形b的面积为:"<<length.get()*width.get()<<endl;
		cout<<length.get()<<endl;
		cout<<width.get()<<endl;
	}
	~rectangel(){cout<<"rectangel的默认的析构函数!"<<x<<endl;}
	//析构函数的顺序正好和构造函数相反,哪个先构造就最后析构,后构造的最先析构。
private:
	int x;
	demo length;
	demo width;
};
int main()
{
	rectangel(100,200,300);
	return 0;
}


运行结果:

技术分享

# include<iostream>
using namespace std;
class A
{
public:
	A(int a,int b):num(a),total(b){};
	//A(int a,int b){num=a;total=a;}
	//用下面的语句,系统会报错。
private:
	const int num;
	int &total;
	//引用和const成员函数不能被赋值.
};
int main()
{
	A a(3,4);
	return 0;
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。