1. 程式人生 > >建構函式,解構函式 知識補漏

建構函式,解構函式 知識補漏

1.解構函式沒有形參。因不能指定任何形參,所以不能過載解構函式雖然可為一個類定義多個建構函式,但只能提供一個解構函式,應用於所有類。

  即使我們編寫自己的解構函式,合成解構函式仍然執行。合成解構函式按物件建立時的逆序撤銷每個非static成員,對於類型別的每個成員,合成解構函式呼叫該成員的解構函式來撤銷物件。

2.建構函式,解構函式沒有返回值。

3.建構函式,解構函式不能為const函式 //error,“const”“this”指標對於建構函式/解構函式是非法的

4.解構函式可以顯式呼叫,

A*a=static_cast<A*>(operator new(sizeof(A)));

new (a) A;

a->~A();

顯式呼叫解構函式的效果是適當地清除物件本身,並沒有釋放物件所佔的記憶體。

那麼是否可以顯式呼叫建構函式,有網友說“個人可以自己把自己創造出來麼?回答是顯然的.而顯視呼叫析構就好像一個人自己自殺了一般,是支援的. ”

A a;

//a.A();error,“函式樣式轉換”: 位於“.”運算子右邊時非法

a.operator A();
a.A::A();

相關推薦

建構函式函式 知識補漏

1.解構函式沒有形參。因不能指定任何形參,所以不能過載解構函式雖然可為一個類定義多個建構函式,但只能提供一個解構函式,應用於所有類。   即使我們編寫自己的解構函式,合成解構函式仍然執行。合成解構函式按物件建立時的逆序撤銷每個非static成員,對於類型別的每個成員,合成解構

建構函式拷貝建構函式函式賦值函式

例一: class CGoods {     //行為,成員方法 public:     CGoods(char *name = NULL, int amount = 0, double price = 0.0) //建構函式 &nbs

c++實現String類(建構函式函式複製建構函式各類運算子過載函式的編寫)

編寫類 String 的建構函式,解構函式,複製建構函式  需要過載下面的運算子: 1、<、>、==和!=比較運算子 2、+=連線運算子和賦值運算子 3、<<輸出運算子和>>輸入運算子 String.h #ifndef _STRING

C++中建構函式拷貝建構函式函式

C++中預設建構函式就是沒有形參的建構函式。準確的說法,按照《C++ Primer》中定義:只要定義一個物件時沒有提供初始化式,就是用預設建構函式。為所有 的形參提供預設實參的建構函式也定義了預設建構函式。 合成的預設建構函式,即編譯器自動生成的預設建構函式。《C++ Pr

c++建構函式拷貝建構函式函式賦值運算子過載

建構函式:        是一個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內只且只調用一次,以保證每個資料成員都有一個合適的初始值。 <strong&g

廣義表的C++實現(包含建構函式拷貝建構函式函式獲取表頭表尾獲取直接後繼等操作)

資料結構是資料在系統中的物理儲存結構,自己編寫資料結構可以對某種資料結構的物理和邏輯結構有更深的瞭解。 一、廣義表作為一種資料結構有以下的特點: 1. 廣義表是遞迴的; 2. 廣義表的元素可以使廣義表,也可以是值; 3. 廣義表是有序的; 4. 廣義表是有長度有深度的。 二

C++ 建構函式函式中能否呼叫虛擬函式

牛客網 ------------------- ------------------- ------------------- 設計模式 ------------------- -------------------

c++類詳:訪問許可權建構函式拷貝建構函式函式

類的定義 類可以看做是一種資料型別,類這種資料型別是一個包含成員變數和成員函式的集合。類的成員變數和普通變數一樣,也有資料型別和名稱,佔用固定長度的記憶體。但是,在定義類的時候不能對成員變數賦值,因為類只是一種資料型別或者說是一種模板,本身不佔用記憶體空間,而變數的值則需要

建構函式拷貝建構函式函式運算子過載

一、建構函式 1、概念  建構函式是一種特殊的成員函式。名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的宣告週期內只調用一次,以保證每個資料成員都有一個合適的初始值。   2、建

為什麼建構函式不能宣告為虛擬函式函式可以

1. 如果我們定義了一個建構函式,編譯器就不會再為我們生成預設構造函數了。2. 編譯器生成的解構函式是非虛的,除非是一個子類,其父類有個虛析構,此時的函式虛特性來自父類。3. 有虛擬函式的類,幾乎可以確定要有個虛解構函式。4. 如果一個類不可能是基類就不要申明解構函式為虛擬函式,虛擬函式是要耗費空間的。5.

C++之建構函式函式拷貝建構函式

一、定義    建構函式:是在一個定義在類裡面的函式,它的作用是在你建立這個類的物件時被自動呼叫。                    如果你自己定義了則呼叫自己定義的,否則呼叫預設的。    解構函式:是一個在類裡面定義的函式,它的作用是在你的類物件死亡時被呼叫刪除這個類

C++知識積累:運算子過載時建構函式函式呼叫次數不一致的問題

在學習運算子過載的時候自己寫了這樣一段程式: class Stu { public: Stu() { std::cout<<"Stu No parameter constructor called!"<<

C++類中的一些細節(過載、重寫、覆蓋、隱藏建構函式函式、拷貝建構函式、賦值函式在繼承時的一些問題)

1 函式的過載、重寫(重定義)、函式覆蓋及隱藏 其實函式過載與函式重寫、函式覆蓋和函式隱藏不是一個層面上的概念。前者是同一個類內,或者同一個函式作用域內,同名不同引數列表的函式之間的關係。而後三者是基類和派生類函式不同情況下的關係。 1.1 函式過載

C++第十週【任務2】定義一個名為CPerson的類有以下私有成員:姓名、身份證號、性別和年齡成員函式建構函式函式、輸出資訊的函式

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: C++第十週【任務2】 * 作

C++中struct也有建構函式函式也可以有訪問型別控制以及結構體大小類大小

C++中struct也有建構函式與解構函式,也可以有訪問型別控制,可以用private關鍵字。如下所示: #include <iostream> struct point { public: point():x_(0.0),y_(0.0

虛擬函式實現機制、建構函式函式能否為虛擬函式與純虛擬函式

 虛擬函式 虛擬函式是C++中用於實現多型的機制。核心理念就是通過基類指標訪問派生類中定義的函式。虛擬函式允許子類重新定義成員函式,繼承時不重新定義虛擬函式也是可以的。而子類重新定義父類的做法稱為覆蓋(override),或者稱為重寫。如果父類或者祖先類中函式func()為虛

找工作筆試面試那些事兒(5)---建構函式函式和賦值函式

作者:寒小陽 時間:2013年9月。 出處:http://blog.csdn.net/han_xiaoyang/article/details/10833931。 宣告:版權所有,轉載請註明出處,謝謝。 類的建構函式、解構函式與賦值函式     &

C++(建構函式函式

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

Java的建構函式函式(筆記1)

已Mydate為例: package text1; public class MyDate { int year; int month; int day; //1.建構函式 public MyDate(int y,int m,int d) { year = y; mon

請為CMyString型別編寫建構函式、copy建構函式函式和賦值運算子函式

如下為型別CMyString的宣告,請為該型別編寫建構函式、copy建構函式、解構函式和賦值運算子函式。 1 class CMyString 2 { 3 public: 4 CMyString(const char* pData = nullptr); 5 CMyS