使用示例在 C++ 中实例化对象的不同方法
先决条件: C++ 类和对象
实例化对象的不同方法
在 C++ 中,实例化对象有多种方法,其中一种方法是使用构造函数。这些是每次实例化该类的对象时由编译器调用的特殊类成员。通过构造函数实例化对象有三种不同的方式:
- 通过默认构造函数。
- 通过参数化构造函数。
- 通过复制构造函数。
1.通过默认构造函数:可以通过默认构造函数以静态方式或动态方式实例化对象。
句法:
Automatic Storage Duration/ Static initialization
classname objectname;
Dynamic Storage Duration/ Dynamic Initialization
classname *objectname = new classname();
Delete Dynamic Object
delete objectname;
下面是通过默认构造函数演示对象实例化的 C++ 程序 -
C++14
// C++ program to implement
// the above approach
#include
using namespace std;
// Defining class example
class example {
int x;
public:
void set(int x)
{
this->x = x;
cout << "The value of x is: "
<< x << "\n";
}
};
// Driver code
int main()
{
// Creating automatic storage object
example obj1;
obj1.set(5);
// Creating dynamic storage object
example* obj2 = new example();
obj2->set(10);
// Explicitly deleting the obj2
delete obj2;
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Defining the class example
class example {
int x;
public:
// Parameterized constructor
example(int y)
{
x = y;
cout << "The value of x is: "
<< x << "\n";
}
};
// Driver code
int main()
{
// Creating object with automatic
// storage duration using Method 1
example obj1(10);
// Creating object with automatic
// storage duration using Method 2
example obj2 = example(8);
// Creating object with dynamic
// storage duration using Method 3
example* obj3 = new example(20);
delete obj3;
return 0;
}
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Defining the class
class example {
int x;
public:
// Parameterized constructor
example(int y)
{
x = y;
cout << "The value of x is: "
<< x << "\n";
}
// Copy constructor
example(example& obj)
{
x = obj.x;
cout << "The value of x in "
<< "copy constructor: "
<< x << "\n";
};
};
// Driver code
int main()
{
// Instantiating copy constructor
// using Method 1
example obj1(4);
example obj2 = obj1;
// Instantiating copy constructor
// using Method 2
example obj3(obj1);
// Instantiating copy constructor
// using Method 3
example* obj4 = new example(10);
example* obj5 = new example(*obj4);
delete obj5;
delete obj4;
return 0;
}
x 的值为:10
解释:
在上面的代码中,有两种不同的方式来实例化一个对象——
- 示例 obj1:此行正在实例化一个具有自动存储持续时间的对象。当超出范围时,该对象将被自动删除。
- example *obj2 = new example():这是实例化具有动态存储持续时间的对象的方式。该对象不会被自动删除。用户必须使用显式删除语句来删除对象。
delete obj2;
2.通过参数化构造函数:对象实例化可以通过静态和动态的参数化构造函数来完成。可以将参数传递给参数化的构造函数。通常,这些参数有助于在创建对象时对其进行初始化。
句法:
Static Initialization
1. classname objectname(parameter);
2. classname objectname = classname(parameter);
Dynamic Initialization
classname *objectname = new classname(parameter);
Delete Dynamic Object
delete objectname;
下面是演示参数化构造函数的 C++ 程序 -
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Defining the class example
class example {
int x;
public:
// Parameterized constructor
example(int y)
{
x = y;
cout << "The value of x is: "
<< x << "\n";
}
};
// Driver code
int main()
{
// Creating object with automatic
// storage duration using Method 1
example obj1(10);
// Creating object with automatic
// storage duration using Method 2
example obj2 = example(8);
// Creating object with dynamic
// storage duration using Method 3
example* obj3 = new example(20);
delete obj3;
return 0;
}
x 的值为:8
x 的值为:20
解释:
在上面的代码中,实例化一个对象有三种方式——
- 示例 obj1(10):这一行正在使用具有自动存储持续时间的参数化构造函数实例化一个对象。当超出范围时,该对象将被自动删除。
- example obj2 = example(8):这一行正在使用具有自动存储持续时间的参数化构造函数实例化一个对象。当超出范围时,该对象将被自动删除。
- example *obj3 = new example(20):这是使用具有动态存储持续时间的参数化构造函数来实例化对象的方式。该对象不会被自动删除。用户必须使用显式删除语句来删除对象。
3. 复制构造函数:复制构造函数可用于静态或动态实例化对象。使用复制构造函数的对象的静态或动态初始化具有以下通用函数原型:
句法:
Copy Constructor
ClassName (const ClassName &old_obj);
Instantiate an object using copy constructor
Static Initialization
1. classname obj1;
classname obj2 = obj1;
2. classname obj1;
classname obj2(obj1);
Dynamic Initialization
1. classname *obj1 = new classname();
classname *obj2 = new classname(*obj1);
下面是演示复制构造函数的 C++ 程序-
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Defining the class
class example {
int x;
public:
// Parameterized constructor
example(int y)
{
x = y;
cout << "The value of x is: "
<< x << "\n";
}
// Copy constructor
example(example& obj)
{
x = obj.x;
cout << "The value of x in "
<< "copy constructor: "
<< x << "\n";
};
};
// Driver code
int main()
{
// Instantiating copy constructor
// using Method 1
example obj1(4);
example obj2 = obj1;
// Instantiating copy constructor
// using Method 2
example obj3(obj1);
// Instantiating copy constructor
// using Method 3
example* obj4 = new example(10);
example* obj5 = new example(*obj4);
delete obj5;
delete obj4;
return 0;
}
复制构造函数中 x 的值:4
复制构造函数中 x 的值:4
x 的值为:10
复制构造函数中 x 的值:10
解释:
在上面的代码中,有三种使用复制构造函数实例化对象的方式——
- 方法一:
- 示例 obj1(4):此行正在实例化一个具有自动存储持续时间的对象。
- 示例 obj2 = obj1:此行调用复制构造函数并创建一个新对象 obj2,它是对象 obj1 的副本。
- 方法二:
- 示例 obj3(obj1):此行调用复制构造函数并创建一个新对象 obj3,它是对象 obj1 的副本。
- 方法三:
- example *obj4 = new example(10):这是实例化具有动态存储持续时间的对象的方式。该对象不会被自动删除。用户必须使用显式删除语句来删除对象。
- example *obj5 = new example(*obj4):这一行调用了一个复制构造函数,并创建了一个新的对象 obj5,它是对象 obj4 的一个副本。用户必须使用显式删除语句来删除对象。