一、c 委託報錯
在使用 c++ 委託的過程中,有時候會遇到各種報錯。常見的報錯有:
1、error C2276: ‘<類名>::<函數名>’: reference to function(<函數名>)implicitlydeclares C-style linkage
這個錯誤通常是由於在委託聲明中使用了函數指針導致的,可以通過將委託聲明為 static 函數或者定義該委託的類為靜態類來解決。
2、error C2064: term does not evaluate to a function taking 0 arguments
這個錯誤通常是由於委託的參數不匹配導致的,需要將委託的參數與目標函數的參數保持一致。
3、error C2440: ‘<類型>’: 句柄類型無效
這個錯誤通常是由於委託的類型錯誤導致的,可以通過檢查委託的類型和目標函數的返回類型來解決。
#include <iostream>
using namespace std;
class Base{
public:
virtual void Func1(){cout<<"Base::Func1"<<endl;}
void Func2(){cout<<"Base::Func2"<<endl;}
};
class Derived : public Base{
public:
virtual void Func1(){cout<<"Derived::Func1"<<endl;}
};
int main()
{
Derived d;
void (Base::* pFunc)() = &Derived::Func1; //聲明一個委託
(d.*pFunc)(); //調用委託
return 0;
}
二、c 委託銷毀內存
在 c++ 中使用委託時,需要注意內存泄漏的問題。當使用 new 運算符在堆上動態分配內存時,需要手動釋放內存。在使用委託時,需要在析構函數中釋放內存。
#include <iostream>
using namespace std;
class Base{
public:
virtual void Func1(){cout<<"Base::Func1"<<endl;}
void Func2(){cout<<"Base::Func2"<<endl;}
};
class Derived : public Base{
public:
virtual void Func1(){cout<<"Derived::Func1"<*pFunc)();
return 0;
}
三、c 委託賦值
在 c++ 中,委託可以賦值給其他委託,也可以作為參數傳遞給其他函數。
#include <iostream>
using namespace std;
class Base{
public:
virtual void Func1(){cout<<"Base::Func1"<<endl;}
void Func2(){cout<<"Base::Func2"<<endl;}
virtual ~Base(){}
};
class Derived : public Base{
public:
virtual void Func1(){cout<<"Derived::Func1"<<endl;}
~Derived(){ cout<<"Derived::~Derived"<*pFunc)();
delete b;
}
int main()
{
Derived d;
void (Base::* pFunc)() = &Derived::Func1;
(d.*pFunc)();
Call(pFunc);
return 0;
}
四、c 委託優勢
c++ 的委託技術可以幫助我們更好地處理對象的函數調用。其主要優勢包括:
1、可以通用於任何對象類型的函數調用
2、可以動態確定被調用的函數
3、可以傳遞對象成員函數的指針作為參數
4、可以提高代碼的可讀性和可維護性
五、c 委託 函數指針
c++ 委託需要使用函數指針來引用一個對象的非靜態成員函數。函數指針與函數名類似,但函數指針指向的是函數的地址,可以用來調用這個函數。
#include <iostream>
using namespace std;
class Base{
public:
virtual void Func1(){cout<<"Base::Func1"<<endl;}
void Func2(){cout<<"Base::Func2"<<endl;}
virtual ~Base(){}
};
class Derived : public Base{
public:
virtual void Func1(){cout<<"Derived::Func1"<<endl;}
~Derived(){ cout<<"Derived::~Derived"<*pFunc)();
delete b;
}
int main()
{
Derived d;
void (Base::* pFunc)() = &Derived::Func1;
(d.*pFunc)();
Call(pFunc);
return 0;
}
六、c 委託會影響性能嗎
在 c++ 中使用委託會帶來一定的性能損失,因為委託需要創建一個對象來調用成員函數,而對象的創建和銷毀都需要一定的時間和內存資源。但這種性能損失非常小,可以忽略不計。
七、c 委託構造
在 c++ 中,委託構造函數是一種可以調用同一類的其他構造函數的構造函數。委託構造函數可以幫助我們省略一些冗餘代碼,並且可以更方便地初始化各種成員變量,提高代碼的可讀性和可維護性。
#include <iostream>
using namespace std;
class Point{
private:
int x, y;
public:
Point():Point(0, 0){}
Point(int x):Point(x, 0){}
Point(int x, int y):x(x),y(y){}
void Print(){ cout<<"("<<x<<", "<<y<<")"<<endl;}
};
int main()
{
Point p1;
p1.Print();
Point p2(1);
p2.Print();
Point p3(2, 3);
p3.Print();
return 0;
}
八、c 委託 劉鐵猛
劉鐵猛是一位擁有碩士學位的青年C++程序員、博客寫手、技術講師、業界大牛級別人物。他在其博客中詳細介紹了 c++ 委託的相關知識,為廣大 c++ 程序員提供了非常有價值的參考。
九、c 委託 action
Action 是一個通用的委託類型,可以用來調用任何類型的函數。Action 的使用非常簡單,只需要使用 typedef 來定義即可。
#include <iostream>
using namespace std;
typedef void (*Action)();
void Func1()
{
cout<<"Func1"<<endl;
}
void Func2()
{
cout<<"Func2"<<endl;
}
int main()
{
Action pAction = Func1;
pAction();
pAction = Func2;
pAction();
return 0;
}
十、c 委託做為變量選取
在 c++ 中,委託可以作為變量來存儲對象的成員函數指針。通過將委託聲明為一個變量,可以更方便地對成員函數進行重複調用。
#include <iostream>
using namespace std;
class Point{
public:
int x, y;
void Print(){cout<<"("<<x<<", "<<y<<")"<<endl;}
};
int main()
{
Point p;
p.x = 10;
p.y = 20;
void (Point::* pFunc)() = &Point::Print;
(p.*pFunc)();
return 0;
}
原創文章,作者:YWWF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149337.html
微信掃一掃
支付寶掃一掃