1. 程式人生 > >C++修飾建構函式的explicit關鍵字

C++修飾建構函式的explicit關鍵字

C++ explicit關鍵字的作用主要是用來修飾類的建構函式,表明該建構函式是顯式的,禁止單引數建構函式的隱式轉換。

如果C++類的建構函式有一個引數,那麼在編譯的時候就會有一個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件,如下面所示:

class MyClass

{

public:

  MyClass(int num);

}

MyClass obj = 10; //ok, convert int to MyClass

上面的程式碼中編譯器自動將整型轉換為MyClass類物件,實際上等同於下面的操作:

MyClass temp(10);

MyClass obj = temp;

上面的所有的操作即是所謂的“隱式轉換”。

如果要避免這種自動轉換的功能,可以在宣告建構函式的時候前面新增上explict關鍵字,將類的建構函式宣告為“顯示”,這樣就可以防止這種自動的轉換操作。

修改上面的MyClass類的建構函式為顯示的,下面的程式碼將不能夠編譯通過,如下所示:

class MyClass

{

public:

  explicit MyClass(int num);

}

相關推薦

38.C++修飾建構函式explicit關鍵字

C++ explicit關鍵字的作用主要是用來修飾類的建構函式,表明該建構函式是顯式的,禁止單引數建構函式的隱式轉換。 如果C++類的建構函式有一個引數,那麼在編譯的時候就會有一個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件,如下面所示: class MyClass { publ

C++修飾建構函式explicit關鍵字

C++ explicit關鍵字的作用主要是用來修飾類的建構函式,表明該建構函式是顯式的,禁止單引數建構函式的隱式轉換。 如果C++類的建構函式有一個引數,那麼在編譯的時候就會有一個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件,如下面所示: class MyClass { public:   M

C++隱式型別轉換建構函式關鍵字explicit

轉自公眾號:碼農有道1. 隱式型別轉換建構函式:    在《C++ Primer》這本經典教程中提到:可以用單個實參來呼叫的建構函式定義從形參型別到該類型別的一個隱式轉換。這句話看起來比較繞口挺不好理解的。我們還是結合例項來理解。#include <iostream&g

C++建構函式詳解及顯式呼叫建構函式(explicit)

一. 什麼是拷貝建構函式 首先對於普通型別的物件來說,它們之間的複製是很簡單的,例如: int a = 100;   int b = a;  而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。 下面看一個類物件拷貝的簡單例子。 #include &

C++各種建構函式的寫法【轉】

  (轉自:https://blog.csdn.net/baiyq369/article/details/54926983) 建構函式 ,是一種特殊的方法 。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中 。特別的一個類可以有

C++:建構函式的初始化列表,以及初始化的順序

建構函式的初始化值列表: 對於物件的資料成員而言,初始化和賦值是有區別的。 當資料成員是 const 、引用,或者屬於某種未提供預設建構函式的類型別的話,就必須通過建構函式的初始值列表為這些成員提供初始值,否則就會引發錯誤。 // 錯誤:ci 和 ri 必須初始化 CobstRef::C

C++ 拷貝建構函式程式碼筆記

拷貝建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於: 通過使用另一個同類型的物件來初始化新建立的物件。 複製物件把它作為引數傳遞給函式。 複製物件,並從函式返回這個物件 #include

C++ 拷貝建構函式this指標練習

總時間限制:  1000ms   記憶體限制:  65536kB // 在此處補充你的程式碼 描述 程式填空,使其按要求輸出 #include <iostream> using namespace std; class A {

C++ 拷貝建構函式練習

總時間限制:  1000ms   記憶體限制:  65536kB // 在此處補充你的程式碼 描述 程式填空,使其輸出9 22 5 #include <iostream> using namespace std; class

C++學習--建構函式和解構函式

建構函式是對物件進行初始化的成員函式,建構函式的名字和類的名字是一樣的,建構函式不用特定的呼叫,是在類例項化中,自動呼叫。建構函式可以有多個,也就是可以進行建構函式過載,例項化過程中會根據建構函式的引數型別、個數進行呼叫。解構函式和建構函式相反,是完成一些清理工作,比如釋放記憶體或者其他的工作。解構

C++(建構函式與解構函式

C++(建構函式與解構函式) 1. 建構函式 用於對類的物件的初始化,建構函式名與類名相同。 可在類內直接定義,也可在類內宣告類外定義(定義時在函式名前加類名::)。 建構函式無返回值型別。 class C { public: C(int a,int b);//類

C++類建構函式為什麼要使用初始化列表?

class Class { int a; double b; string s; void execute(); }; \\第一種寫法 Class::Class(){ a = 0; b = 1.0; s = "stirng"; } \\第二種寫法 Class::Clas

C++拷貝建構函式 的理解

#include <iostream> using namespace std; //拷貝建構函式的理解 class Point { public: Point(); Point(int X, int Y); ~Point(); Point(Point

5.4-day04-C++拷貝建構函式/靜態成員

一、拷貝建構函式和拷貝賦值運算子 1.拷貝構造:用一個已有的物件,構造和它同類型的副本物件——克隆。 2.形如 class X {   X (const X& that) { ... } }; 的建構函式成為拷

c++:(各種)建構函式的呼叫方式

c++的類中有5種值得注意的基本的函式: 無參建構函式 有參建構函式 拷貝建構函式 賦值函式 解構函式 關於解構函式,需要注意的點在上一篇部落格裡面 c++: 是否會自動delete? 也提到過了,在這裡暫時不多說。這篇部落格主要記錄這3個建構函

C++類建構函式初始化列表

        建構函式初始化列表以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括號中的初始化式。例如: class CExample {     public:         int a;         float b;      

C++ 拷貝建構函式和賦值運算子

本文主要介紹了拷貝建構函式和賦值運算子的區別,以及在什麼時候呼叫拷貝建構函式、什麼情況下呼叫賦值運算子。最後,簡單的分析了下深拷貝和淺拷貝的問題。 拷貝建構函式和賦值運算子 在預設情況下(使用者沒有定義,但是也沒有顯式的刪除),編譯器會自動的隱式生成一個拷貝建構函式和賦值

C++:建構函式2——拷貝建構函式

前言:拷貝建構函式是C++中的重點之一,在這裡對其知識進行一個簡單的總結。 一、什麼是拷貝建構函式 在C++中,對於內建型別的變數來說,在其建立的過程中用同類型的另一個變數來初始化它是完全可以的,如: 1 int value=100; 2 int new_value=value;//在變

C/C++】建構函式 constructor

對於一個class,可以定義多種建構函式,比如 class A { public: // your constructor A // your constructor B void Print() {std::cout<<valu

C++拷貝建構函式和運算子過載(VC實現)

String.h檔案: #ifndef STRING_H #define STRING_H #include <ostream> using namespace std; class String { public: String(){ m_pStr = nullptr