C++中的构造函数

时间:2020-02-23 14:29:54  来源:igfitidea点击:

C++或者任何其他语言的构造函数是用于初始化新创建的对象的类的成员函数。

它们与该类具有相同的名称,并且不返回任何值。

施工人员的工作:

编译器一旦遇到新创建的对象,就会自动调用相应类的构造函数。

然后,构造函数初始化该类的新创建的对象。

C++中的构造函数类型

以下是C++中构造函数的类型:

  • 默认构造函数
  • 参数化构造函数
  • 复制构造函数

1.默认构造函数

默认构造函数不接受任何自变量或者参数。

如果用户未明确声明,则编译器将隐式调用此构造函数。

语法:

class_name()
{
//code
}

例:

#include <iostream> 
using namespace std; 

class Display { 
public: 
	int x; 

	//Default Constructor 
	Display() 
	{ 
		 x = 10;
	} 
}; 

int main() 
{ 
	
	Display d; 
	cout << "The value of x: " << d.x << endl ;
	
	return 1; 
} 

输出:

The value of x: 10

2.参数化构造函数

参数化构造函数允许在对象创建期间传递参数。

它有助于对象的初始化,并为对象的不同数据变量提供不同的值。

语法:

class_name(parameters)
{
 //code
}

例:

#include <iostream>
using namespace std;
class Multiply{
public:
 //Parameterized constructor
 Multiply(int a, int b) {
     int result = a*b;
   cout<<result<<endl;
 }
};
int main(void){
 
 Multiply m(10, 10); //implicit call to the constructor
 
 Multiply ex = Multiply(100, 5); //explicit call to the constructor
 
 return 0;
}

输出:

100
500

3.复制构造函数

Copy构造函数创建相应类的现有对象的副本。
因此,它将一个对象的所有数据变量复制到另一个对象。

语法:

class_name(const class_name & object_name)
{
  //code
}

例:

#include<iostream>
using namespace std;
class Construct
{
 
  int a, b;   
  
  public:
  Construct(int aa, int bb)
  {
      a = aa;
      b = bb;
  }
  
  
  Construct (const Construct &con) //Copy constructor
  { 
      a = con.a;
      b = con.b;
  }
  
  void show ()
  {
      cout<<a<<" "<<b<<endl;
  }
};

int main()
{
  Construct C(5, 5);     
  Construct C1 = C;      //Calling the Copy constructor
  
  cout<<"Copy constructor:\n ";
  C1.show();
  return 0;
}

输出:

Copy constructor:
 5 5

C++中的构造方法重载

重载用于具有不同数量和参数类型的相同函数定义。

以类似的函数重载方式,即使构造函数也可以用C++语言重载。

例:

#include<iostream>
using namespace std;
class Area_parameters
{
  public:
  int a, len, width;
 
  Area_parameters(int x)
  {
      a = x;
      cout<<x<<endl;
  }
  
  Area_parameters(int l, int b)
  {
      len = l;
      width = b;
      cout<<l<<" "<<b<<endl;
  }
};

int main()
{
  
 Area_parameters obj(5);
  
 Area_parameters obj1(10, 20);
  
}

输出:

5
10 20

构造函数和成员函数之间的区别

  • 构造函数不提供任何返回类型,另一方面,函数确实具有返回类型。

  • 当创建对象时需要隐式调用构造函数,而成员函数则需要显式调用。