为对象创建方法 [英] creating methods for objects
问题描述
是否有可能覆盖一个特定对象的方法,比如你可以在Ruby中用
做什么?类似的东西:
- 8< -
A级{
公开:
无效方法();
}
void A :: method(){
//做点什么...
}
A x = new A();
void x :: method( ){
//做别的事......
}
- 8< -
或者接近它的任何东西?
谢谢,
Andre''
Hi,
is it possible to override methods for one specific object, like you can
do in Ruby? Something like:
--8<--
class A {
public:
void method();
}
void A::method() {
// do something...
}
A x = new A();
void x::method() {
// do something else...
}
--8<--
Or anything close to that?
Thanks,
Andre''
推荐答案
2004年6月18日星期五16:31:01 -0300 in comp.lang.c ++,André
< an ***** *****@syspoint.com.br>写道,
On Fri, 18 Jun 2004 16:31:01 -0300 in comp.lang.c++, André
<an**********@syspoint.com.br> wrote,
是否可以覆盖一个特定对象的方法,就像你在Ruby中做的那样?
is it possible to override methods for one specific object, like you can
do in Ruby?
No.你可以为这个对象声明一个派生类。
你可能会使用一个指向函数的指针,或者一些类似的低级别的指示。
hackery。
No. You might declare a derived class just for that one object.
You might use a pointer to a function, or some similar low-level
hackery.
André写道:
André wrote:
是否有可能覆盖一个特定对象的方法,就像你可以在Ruby中做的那样?类似于:
- 8< -
A类{
公开:
无效方法();
}
void A :: method(){
//做点什么...
A x = new A();
void x :: method(){
//做其他事......
- 8< -
>或者接近那个?
is it possible to override methods for one specific object, like you can
do in Ruby? Something like:
--8<--
class A {
public:
void method();
}
void A::method() {
// do something...
}
A x = new A();
void x::method() {
// do something else...
}
--8<--
Or anything close to that?
No.
C ++是为了适应C编译器和链接器模型而发明的,最小的
更改旧版编译器。每个翻译单元必须包含每个方法相同的
定义,只是为了简化链接器的要求。
调查函数指针和方法指针,让''x''指向一个与其类的方法不同的
方法。
为什么你不能只使用Ruby如果你需要它? C ++适用于大型,低级别的b $ b系统;不是今天写的平均代码。
-
Phlip
http://industrialxp.org/community/bi...UserInterfaces
未经测试的代码,但你会得到一个jist。
class BarnyardAnimal
{
私人:
int something;
static int EatDefault(BarnyardAnimal& me,int food)
{
me.something = 7 +食物; //访问成员变量
}
public:
int(* pEat)(BarnyardAnimal&,int );
int吃(int食物)
{
pEat(* this,food);
}
BarnyardAnimal(无效):吃(EatDefault)
{
} >
};
int main(无效)
{
BarnyardAnimal cow;
cow.Eat(5); //默认功能
cow.Eat = ReturnFunctionPointer();
cow.Eat(7); //调用其他功能
}
-JKop
Untested code, but you''ll get the jist.
class BarnyardAnimal
{
private:
int something;
static int EatDefault(BarnyardAnimal& me, int food)
{
me.something = 7 + food; //Accessing member variable
}
public:
int (*pEat)(BarnyardAnimal&,int);
int Eat(int food)
{
pEat(*this,food);
}
BarnyardAnimal(void) : Eat(EatDefault)
{
}
};
int main(void)
{
BarnyardAnimal cow;
cow.Eat(5); //Default function
cow.Eat = ReturnFunctionPointer();
cow.Eat(7); //Calls other function
}
-JKop
这篇关于为对象创建方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!