C 物件導向高階程式設計 筆記

2021-09-29 12:40:25 字數 3323 閱讀 7132

最近重新複習了一下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...