c++運算符重載以及一些基本概念
阿新 • • 發佈:2017-05-30
不同類 col end 錯誤 pan [] () 無限 c++對象
.必須在初始化列表中初始化的情況: 沒有默認構造函數的類類型的成員
const類型成員 和 引用類型的成員變量
-->const 類型成員會調用拷貝構造函數 而引用類型不會調用拷貝構造函數
class B;
class A{
friend class B;
public:
A()
{
a_ = 0;
cout << "A()" << endl;
}
A(int a):a_(a)
{
cout << "A(int)" << endl;
}
A(const A &s)
{
a_ = s.a_;
cout << "A &" << endl;
}
private:
int a_;
};
class B : public A
{
public:
B(A &a2, A &a3)
:a2_(a2),
a3_(a3)
{
}
void prin()
{
cout << a2_.a_ << " " << endl;
}
private:
// A a1_;
A &a2_;
const A a3_;
};
int main(int argc, const char *argv[])
{
A a1(4), a2(5), a3(6); //--> A(int) A(int) A(int)
B b(a2, a3);
b.prin();
return 0;
}
-->友元類,能訪問到A類的私有成員
3.c++的兩種初始化方式:1.直接初始化:調用構造函數 2.復制初始化:使用=號操作符,會調用到拷貝構造函數 4.當函數形參或者返回值為類類型時,將由復制構造函數進行復制 A a1; fun(A ); --->調用fun(a)會調用拷貝構造函數,當然最後也會調用析構函數的 5.拷貝構造函數為引用的原因:防止無限調用拷貝構造函數下去。拷貝構造函數傳形參值時會調用類型的拷貝構造函數,這樣無窮下去 6.深拷貝 淺拷貝 :淺拷貝:對數據成員進行簡單的賦值 深拷貝:對於對象中的動態成員,不能簡單的賦值,而應該又一次動態分配空間 7. 空間 C++對象:先調用基類構造函數,在初始化列表上成員,再調用自己的構造函數 -->析構的時候反過來
8. 重載 覆蓋 隱藏的概念
9. 轉換構造函數和類型 轉換函數的差別。 類型轉換函數註意的幾點:1.成員函數, 2.不能指定返回類型, 3.不能有參數 -->operator int() -->函數裏面要return 一個同樣類型的出來
10.多態性:靜態多態性(重載(操作符。 函數)) 動態多態性:虛函數
11.:使用指針訪問非虛函數:訪問指針的類型的,
使用指針訪問虛函數時:訪問指針所指對象的類型
---> 引用也是類似的,只是引用一經聲明不能改變了
12.觸發動態綁定的條件:1.虛函數才幹運行動態綁定 2.必須通過基類類型的指針或者引用進行函數調用
13.構造函數不能為虛函數:虛函數實在不同類型的對象產生不同的動作,如今對象還沒產生,沒有虛函數指針。訪問不到虛函數。
13.動態執行時類型識別(RTTI):typeid 返回指針或者引用所指對象的實際類型
dynamic_cast 將基類的指針或引用安全的轉換成派生類型的指針或引用
14.顯式轉換:reinterpret_cast 強制類型轉換-- >類似於c的類型轉換
const_cast 轉換掉const屬性或者加上const屬性
static_cast 隱式類型轉換,能夠自己主動轉換的
dynamic_cast 主要用於有虛函數的下行轉換
c++primer第四版435
1.賦值( = ), 下標( [ ] ) ,調用 ( ( ) ), 成員訪問箭頭 (->)等操作符必須定義為成員,定義為非成員時,編譯器報錯
2. 像賦值一樣。符合賦值操作符通常應定義為類的成員,可是定義為非成員的復合賦值操作符時不會出現編譯錯誤
3.改變對象狀態或給定類型緊密聯系的其它一些操作符,如自增,自減和解引用,通常應定義為類的成員
4.對稱操作,如算術操作符,相等操作符,關系操作符和位操作符。最好定義為普通的非成員函數
不能重載的操作符:
:: .* . ? :
基本註意問題:
1.成員變量的初始化順序僅僅與在聲明時的順序一樣,和初始化列表中的順序無關 23.c++的兩種初始化方式:1.直接初始化:調用構造函數 2.復制初始化:使用=號操作符,會調用到拷貝構造函數 4.當函數形參或者返回值為類類型時,將由復制構造函數進行復制 A a1; fun(A ); --->調用fun(a)會調用拷貝構造函數,當然最後也會調用析構函數的 5.拷貝構造函數為引用的原因:防止無限調用拷貝構造函數下去。拷貝構造函數傳形參值時會調用類型的拷貝構造函數,這樣無窮下去 6.深拷貝 淺拷貝 :淺拷貝:對數據成員進行簡單的賦值 深拷貝:對於對象中的動態成員,不能簡單的賦值,而應該又一次動態分配空間 7.
c++運算符重載以及一些基本概念