C++:关于构造函数

 

     类属于一种用户自定义的数据类型,在声明一个对象的时候,编译程序要为对象分配存储空间,进行必要的初始化,这些工作是由构造函数来完成的.简单理解,构造函数就是用来对数据成员进行初始化的。

      与构造函数相对应的是析构函数,它们之间的关系很像"new"和“delete”的关系,而且它们的声明和最后的销毁也是想new和delete那样对应的。析构函数用来收回存储空间,完成一些善后的工作.

 

构造函数使用的一些注意事项:

  1,构造函数名字必须与类名相同。

  2,构造函数不指定返回值,但有隐含返回值,就是说返回值这里可以先不用考虑。

  3,构造函数可以重载。

  4,调用构造函数对类对象初始化时,先执行初始化列表中的数据成员,再执行构造函数体中的内容。初始化列表中数  据成员的初始化顺序与类体中定义的顺序相同。

       尤其要注意的是第4条中初始化列表中数据成员的初始化顺序。


构造函数的示例

 

		#include<iostream>
		using namespace std;
		
		
		class Date   //定义一个日期类
		{
		public:
			Date(int y,int m,int d);    //带有3个参数的构造函数
		
			Date(int y=2000):year(y)    //默认的构造函数
			{
				month=10;
				day=1;
				cout<<"Constructor of Date with 1 parameter. "<<endl;
		
			}
		
			~Date(){cout<<"Destructor of Date:"<<year<<"."<<month<<"."<<day<<endl;}  //析构函数
		
			int IsLeapYear();   //判断闰年
		
			void Print(){cout<<year<<"."<<month<<"."<<day<<endl;}   //打印出年月日
		
		private:
			int year,month,day;
		};
		
		
		Date::Date(int y,int m,int d):year(y),month(m),day(d)   //带有3个参数的构造函数的定义
			 {
				 cout<<"Constructor of Date with 3 Parameters."<<endl;
			 }
		
		int Date::IsLeapYear()   //判断闰年的函数的定义
			 {
				 return (year%4==0 && year%100!=0) || (year%400==0);
			 }
		
		int main()   //主函数
		{
			Date date1(2002,10,1),date2;   //声明两个Date类型的变量,分别为date1,date2,其中date1调用带有3个参数的构造函数,date2调用默认的构造函数。
			
			cout<<"date1:";
			date1.Print();  //打印出date1的年月日
		
			cout<<"date2:";
			date2.Print();   //打印出date2的年月日
			
			//判断date2是否是闰年
			if(date2.IsLeapYear()) cout<<"date2 is a leapyear."<<endl; 
			else cout<<"date2 is not a leapyear."<<endl;
		
			return 0;
		}

结果:

  C++:关于构造函数

      需要调用的是,构造函数的调用与析构函数相反,这两个东西看起来类似于VB中form_load和form_unload,但是 使用形式上更像进栈和出栈,先进后出,先调用构造函数的对象后被销毁。

在调用构造函数时,除了用传统的数据类型,比如int,double型数据进行对象的初始化外,还可以用一个已知的对象来初始化一个正在创建的同类对象,这种特殊的构造函数叫做复制的构造函数。

 

例如:


	#include<iostream>
	using namespace std;
	
	class Date  //定义一个Date类
	{
	public:
		Date(int y,int m,int d);     //3参数的构造函数
	
		Date(int y=2000):year(y)    //1个参数的构造函数
		{
			month=10;
			day=1;
			cout<<"constructor of date with 1 parameter."<<endl;
		}
	
		Date(const Date& d);   //复制的构造函数
	
		~Date(){cout<<"destructor of date:"<<year<<‘.‘<<month<<‘.‘<<day<<endl;}  //析构函数
	
		int IsLeapYear();  //判断闰年
	
		void Print(){cout<<year<<"."<<month<<"."<<day<<endl;}  //打印年月日
	
	private:
		int year,month,day;
	
	};
	
	Date::Date(int y,int m,int d):year(y),month(m),day(d) //3参数的构造函数定义
	{
		cout<<"constructor of date with 3 parameters."<<endl;
	} 
	
	Date::Date(const Date& d)    //复制的构造函数
	{
		year=d.year ;
		month=d.month ;
		day=d.day ;
		cout<<"copy constructor of date."<<endl;
	
	}
	
	int Date::IsLeapYear()  //判断闰年
	{
		return (year%4==0 && year%100!=0)||(year%400==0);
	}
	
	
	
	int main()
	{
		Date date1(2002,10,1);  //定义date1
		Date date2(date1);   //用date1来初始化date2
	
		cout<<"date1: ";
		date1.Print();
	
		cout<<"date2: ";
		date2.Print();
	
		return 0;
	
		
	}

结果:

C++:关于构造函数


  用对象来初始化对象本质上和用一般数据来初始化对象一样,因为对象很像是一种用户自定义的数据类型,它的使用和一般数据类型一样。


C++:关于构造函数,布布扣,bubuko.com

C++:关于构造函数

上一篇:【深入理解C++】从初始化列表和构造函数谈C++的初始化机制


下一篇:python中sys.path使用