一、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/n/149337.html
微信扫一扫
支付宝扫一扫