📜  如何在 C++ 中定义类外的构造函数?

📅  最后修改于: 2022-05-13 01:54:29.938000             🧑  作者: Mango

如何在 C++ 中定义类外的构造函数?

构造函数是一种特殊类型的成员函数,其任务是初始化其类的对象。它没有返回类型,因此不能使用return关键字 它在创建对象时被隐式调用。

  • 构造函数也用于解决初始化问题。
  • 创建对象后调用它。
  • 与班级同名。

类外定义的构造函数

构造函数可以在类外定义,但必须在类内声明。在这里,您将使用范围解析运算符。

类外构造函数定义的语法:

例子:

C++
// C++ program to define
// constructor outside the
// class
#include 
using namespace std;
  
class GeeksForGeeks {
public:
    int x, y;
  
    // Constructor declaration
    GeeksForGeeks(int, int);
  
    // Function to print values
    void show_x_y() {
      cout << x << " " << y << endl; 
    }
};
  
// Constructor definition
GeeksForGeeks::GeeksForGeeks(int a, int b)
{
    x = a;
    y = b;
    cout << "Constructor called" << endl;
}
  
// Driver code
int main()
{
    GeeksForGeeks obj(2, 3);
    obj.show_x_y();
    return 0;
}


C++
// Header file
// Save this code with .h extension
// For example- GeeksForGeeks.h
#include 
using namespace std;
class ClassG {
public:
    int a, b;
    
    // Constructor declaration
    ClassG();
  
    // Function to print values
    void show() 
    { 
      cout << a << " " << b; 
    }
};


C++
// Adding GeeksForGeeks.h File
#include"GeeksForGeeks.h"
  
#include
using namespace std;
  
// Constructor definition
ClassG::ClassG()
{
    a = 45;  
    b = 23;
}
  
// Driver code
int main()
{
    
    // This will call the 
    // constructor
    ClassG obj;
    
    // Function call
    obj.show();
}


输出
Constructor called
2 3

在类外定义构造函数的原因

以下是最好在类外部定义构造函数的一些原因:

  • 无编译时依赖:可以将类定义放在头文件中,将构造函数定义放在将要编译的实现文件中。
  • 可读性和更简洁的代码:主要原因是在类外定义构造函数是为了可读性。因为可以将声明分离到头文件中,将实现分离到源文件中。

示例: GeeksForGeeks.h

C++

// Header file
// Save this code with .h extension
// For example- GeeksForGeeks.h
#include 
using namespace std;
class ClassG {
public:
    int a, b;
    
    // Constructor declaration
    ClassG();
  
    // Function to print values
    void show() 
    { 
      cout << a << " " << b; 
    }
};

文件: geek.cpp

C++

// Adding GeeksForGeeks.h File
#include"GeeksForGeeks.h"
  
#include
using namespace std;
  
// Constructor definition
ClassG::ClassG()
{
    a = 45;  
    b = 23;
}
  
// Driver code
int main()
{
    
    // This will call the 
    // constructor
    ClassG obj;
    
    // Function call
    obj.show();
}

输出:

45 23