C++中複製建構函式和賦值運算子的區別
C++是一種通用的、中級語言、區分大小寫、與平臺無關的程式語言,支援面向物件程式設計的概念。C++由Bjarne Stroustrup於1979年在貝爾實驗室建立。由於C++是一種與平臺無關的程式語言,因此它可以用於各種系統,包括Windows、Mac OS和各種UNIX版本。
C++中的運算子用於對值和變數執行特定操作。以下是C++中使用的運算子列表:
算術運算子
賦值運算子
比較運算子
關係運算符
邏輯運算子
位運算子
一元運算子
三元/條件運算子。
在上述組中,賦值運算子用於為變數賦值。
在學習複製建構函式之前,讓我們簡要了解一下建構函式。C++中的建構函式是一種特殊的方法,其名稱與類名相同,並帶有括號“()”,在建立物件時會自動呼叫。建構函式用於初始化新建立的物件的變數。
複製建構函式是一種建構函式,它使用同一類中先前建立的另一個物件來初始化物件。
現在讓我們詳細瞭解一下,並比較和對比複製建構函式和賦值運算子的各種特性。
什麼是賦值運算子?
賦值運算子用於為變數賦值。賦值運算子的左運算元是變數名,右運算元是該變數的值。如果兩種運算元的資料型別不同,則會引發編譯錯誤。
賦值運算子的型別有:
= 運算子 − 它只為變數賦值。例如,“a=10”,這裡值10將被賦給變數“a”。
+= 運算子 −此運算子首先將變數的當前值加上右邊的值,然後將新值賦給變數。
-= 運算子 −此運算子首先將變數的當前值減去右邊的值,然後將新值賦給變數。
*= 運算子 −此運算子首先將變數的當前值乘以右邊的值,然後將新值賦給變數。
/= 運算子 −此運算子首先將變數的當前值除以右邊的值,然後將新值賦給變數。
賦值運算子示例
讓我們來看一個賦值運算子的例子。這裡我們使用賦值運算子為不同的變數賦值。
#include <iostream>
int main() {
// Write C++ code here
int a=5,b;
b=a;
std::cout << "The value of a is "<<a<<"\n";
std::cout << "The value of b is "<<b;
return 0;
}輸出
在上面的例子中,我們使用了兩個變數“a”和“b”,首先我們透過賦值運算子“=”將a的值賦為5。我們將a的值賦給變數b。上述程式碼將產生如下輸出。
The value of a is 5. The value of b is 5.
什麼是複製建構函式?
這在程式設計中通常是必需的,以便在不影響原始物件的情況下建立物件的單獨副本。在這些情況下,複製建構函式派上用場。複製建構函式是一種建構函式,它透過使用同一類中先前建立的物件來初始化物件來建立物件。複製建構函式有兩種型別。
預設複製建構函式 − 當未聲明覆制建構函式時,C++編譯器會建立一個預設建構函式,它按原樣複製所有成員變數。
使用者定義的複製建構函式 − 使用者定義的複製建構函式稱為使用者定義的複製建構函式。
語法
複製建構函式的語法為:
Class_Name(Class_name & oldobject)
{
// Body of constructor
}複製建構函式 - 示例
複製建構函式用於從同一類的另一個物件初始化一個物件,將物件複製為函式的引數,以及將物件複製為函式的引數。要從函式返回物件,請複製該物件。
示例
讓我們來看一個例子,瞭解我們如何精確地使用複製建構函式。
#include<iostream>
using namespace std;
class Example {
int x, y; //data members
public:
Example(int a, int b) {
x = a;
y = b;
}
/* Copy constructor */
Example(Example & ex) {
x = ex.x;
y = ex.y;
}
void display() {
cout << x << " " << y << endl;
}
};
/* main function */
int main() {
Example obj1(20, 30); // Normal constructor
Example obj2 = obj1; // Copy constructor
cout << "Normal constructor : ";
obj1.display();
cout << "Copy constructor : ";
obj2.display();
return 0;
}在上面的例子中,我們把類名定義為Example,並建立了一個建構函式,並將值20和30傳遞給建構函式。語句Example (Example &ex) 表示複製建構函式。它複製先前建立的資料成員的值。
輸出
上述程式碼將產生以下輸出:
Normal constructor : 20 30 Copy constructor : 20 30
在我們的示例中,我們建立了兩個物件obj1和obj2,我們將obj1的值賦給obj2。
複製建構函式和賦值運算子的比較
C++中這兩個概念的主要目的是賦值,但兩者之間的主要區別在於,複製建構函式建立一個新物件並賦值,而賦值運算子不會建立新物件,而是將值賦給同一物件的資料成員。
下表重點介紹了複製建構函式和賦值運算子之間的主要區別。
| 比較依據 | 複製建構函式 | 賦值運算子 |
|---|---|---|
| 基本比較 |
|
|
| 記憶體管理 | 已建立的舊物件和呼叫的新物件將共享不同的記憶體位置。 | 第一個物件和第二個物件(第二個物件被賦予第一個物件的值)共享相同的記憶體位置。 |
| 語法 | 複製建構函式的語法為:Class_name(Class_name &Old_obj); | 賦值運算子的語法為:Class name Obj1, Obj2; Obj2=Obj1; |
| 呼叫 | 當用舊物件初始化新物件時,會呼叫複製建構函式;當物件作為非引用引數傳遞給函式時,也會呼叫複製建構函式。 | 當舊物件的值被賦給新物件時,會呼叫賦值運算子。 |
結論
複製建構函式和賦值運算子的區別在於,複製建構函式有助於建立已存在物件的副本,而不會改變已建立物件的原始值,而賦值運算子有助於為程式中的資料成員或物件賦予新值。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP