最近重新複習了一下c++物件導向高階程式設計中知識點,學而時習之,不亦說乎。
拷貝建構函式,拷貝的是同型別的物件
=賦值建構函式
檢測自我賦值(為什麼?有什麼作用?)
if this == &str
return *this;
組合繼承
委託示例
委託 + 繼承
composite
pimpl
編譯防火牆 左邊永遠不用編譯,只需要編譯右邊。
copy on write
非虛函式
虛函式純虛函式(必須被子類重寫)
虛函式被子類override重寫
類的靜態成員使用
靜態函式只能處理類的靜態成員資料
class account
operator double() const
bool operator< (const stone& rhs) const ;
template <>
struct haolipeng{
size_t operator() (char x) const {
cout<<"char operator"template <>
struct haolipeng{
size_t operator() (int x) const {
cout<<"int operator"template <>
struct haolipeng{
size_t operator() (long x) const {
cout<<"long operator"int main()
cout<()(10)模板偏特化 partial specialization
個數的偏
範圍的偏
template
class c
template
class c
cobj1;
cobj2;
const 的使用,在實際**中的使用
在乙個成員函式的後面的const是很重要的
const object物件(data members不得變動)只能呼叫const成員函式
當成員函式的const和non-const版本同時存在,const object物件只能呼叫const版本,non-const object只能呼叫non-const版本。
菜鳥級別的程式設計師設計的類,不管是資料成員還是函式成員都包括const
p14先略過(未完成)
p17,18,19
cowcopy on write
在多人共享時,可使用cow機制。
::operator new
::operator delete
::operator new
::operator delete
過載全域性的new和delete
//過載new和delete表示式
void* myalloc(size_t size)
return malloc(size);
void myfree(void* ptr)
return free(ptr);
inline void* operator new(size_t size)
cout<<"jihou global new() \n";
return myalloc(size);
inline void operator delete(void* ptr)
cout<<"jihou global delete()\n";
myfree(ptr);
int main()
int* p = new int;
if(p)
delete(p);
return 0;
輸出結果是下面兩句話
jihou global new()
jihou global delete()
上面過載的是全域性的new和delete
過載member operator new/delete
class foo
public:
foo(){
cout<<"foo ctor called"<~foo(){
cout<<"foo dtor called"void* operator new(size_t size)
cout<<"foo::new function,size is"void* operator new(size_t size)
cout<<"foo::new function,size is"void operator delete(void* ptr, size_t size)
if(ptr) {
cout << "foo::delete called" << endl;
return free(ptr);
void operator delete(void* ptr, size_t size)
if(ptr) {
cout << "foo::delete called" << endl;
return free(ptr);
int main()
//new delete example
foo* ptr = new foo;
if(ptr != null)
delete(ptr);
//new delete example
foo* array_ptr = new foo[10];
if(array_ptr != null)
delete array_ptr;
return 0;
過載placement new,可以將new中傳遞不同的引數,呼叫不同的new過載函式
動態繫結是多型的基礎
c++11/14 新特性學習
全文搜尋工具 windows grep 2.3
variadic templates(since c++ 11)
數量不定的模板引數
...是包
用於模板引數,就是模板引數包
用於函式引數型別,就是函式引數型別包
用於函式引數,就是函式引數包
spaces in template expressions
vector>; //ok in each c++ version
vector>; //ok since c++11
nullptr and std::nullptr_t
uniform initialization 一致性初始化
什麼是不完美**?
什麼是完美**?
big three
拷貝構造
拷貝賦值
析構函式
物件導向高階程式設計
相同class的各物件互為友元 class complex int func const complex param private double re,im string inline string string const char cstr 0 else inline string strin...
C 物件導向(高階)
1.構造 委託 乙個建構函式可以呼叫另外的建構函式 class aa int i a i,0 a int i,int j 注 避免遞迴呼叫 例 class aa int i a i,0 a int i,int j a 2.不可變物件和類 immutable object and class 不可變物...
python 物件導向高階程式設計
python 裝飾器 property使用 classscreen property defwidth self returnself.width pass width.setter defwidth self,value self.width value property defheight se...