賦值運算子 拷貝初始化和this指標

2022-01-20 18:19:28 字數 1004 閱讀 4170

一、賦值運算子和拷貝建構函式(過載技術)

賦值運算子和拷貝建構函式有編譯器預設提供,但如果想做更複雜的事,需要過載。

1.下面用乙個簡單的例子先區分一下賦值運算子和拷貝建構函式:

#includeusing namespace std;

class alpha

//沒有引數的建構函式

alpha(int d):data(d) {} //乙個引數的建構函式

void diplay() //顯示資料

alpha(int d):data(d) {}

void display()

注意例項中的:使用this指標返回值。(從成員函式和過載運算子返回值,this指標是乙個更實用的用法)

1)this指標指向的是該成員函式所屬的物件,所以*this就是這個物件本身。通常實用引用和this指標從過載賦值運算子返回資料,從而避免建立額外的物件。

2)必須注意:this指標在靜態成員函式中是無效的,因為靜態成員函式不屬於任何特定的物件。

三、dynamic_cast和typeid

這兩個功能通常使用在有很多類都由乙個基類派生的情況下。為了使動態型別轉換能夠工作,基類必須是多型的(也就是說至少包含乙個虛函式)。

1.dynamic_cast可以改變指標型別

#include#includeusing namespace std;

class base

virtual void vertfunc() //要想用dynamic_cast,基類必須是多型型別

{} base(int b):ba(b){}

void show()

int main()

2.typeid可以得到未知的物件型別資訊

如上面的例項中最後加上:

cout《執行程式會顯示class derv2,因為pbase=new derv2(34,32); 這條語句。

初始化 賦值 拷貝

折騰我挺長一段時間,基本挺明白了,先來個區別說明 賦值操作是在兩個已經存在的物件間進行的,而初始化是要建立乙個新的物件,並且其初值 於另乙個已存在的物件。編譯器會區別這兩種情況,賦值的時候呼叫過載的賦值運算子,初始化的時候呼叫拷貝建構函式。如果類中沒有拷貝建構函式,則編譯器會提供乙個預設的。這個預設...

複製建構函式,賦值運算子過載,列表初始化

拷貝構造函式呼叫時機 class stud stud stu1 1 使用乙個物件初始化另乙個物件 stud stu2 stu1 2 stu stu2 stu1 3 物件作為實參傳給函式形參 printf stu const stud st prittf stu stu1 4 函式的返回值是乙個物件 ...

過載運算子,拷貝賦值運算子

一 過載運算子 在c語言當中遇到有很多的運算子,如 等等。如果我們用 對兩個物件進行判斷是否相等,系統就不樂意了,它不知道怎麼樣去判斷兩個物件是否相等?比如,我定義了乙個類,class a a obj1 a obj2 if obj1 obj2 錯誤,系統判斷不了 原因分析 系統遇到兩個物件之間的判斷...