一、賦值運算子和拷貝建構函式(過載技術)
賦值運算子和拷貝建構函式有編譯器預設提供,但如果想做更複雜的事,需要過載。
1.下面用乙個簡單的例子先區分一下賦值運算子和拷貝建構函式:
#includeusing namespace std;注意例項中的:使用this指標返回值。(從成員函式和過載運算子返回值,this指標是乙個更實用的用法)class alpha
//沒有引數的建構函式
alpha(int d):data(d) {} //乙個引數的建構函式
void diplay() //顯示資料
alpha(int d):data(d) {}
void display()
1)this指標指向的是該成員函式所屬的物件,所以*this就是這個物件本身。通常實用引用和this指標從過載賦值運算子返回資料,從而避免建立額外的物件。
2)必須注意:this指標在靜態成員函式中是無效的,因為靜態成員函式不屬於任何特定的物件。
三、dynamic_cast和typeid
這兩個功能通常使用在有很多類都由乙個基類派生的情況下。為了使動態型別轉換能夠工作,基類必須是多型的(也就是說至少包含乙個虛函式)。
1.dynamic_cast可以改變指標型別
#include#includeusing namespace std;2.typeid可以得到未知的物件型別資訊class base
virtual void vertfunc() //要想用dynamic_cast,基類必須是多型型別
{} base(int b):ba(b){}
void show()
int main()
如上面的例項中最後加上:
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 錯誤,系統判斷不了 原因分析 系統遇到兩個物件之間的判斷...