读书人

一个种的一个成员函数想有不同的行为

发布时间: 2013-01-28 11:49:56 作者: rapoo

一个类的一个成员函数,想有不同的行为
很多人说用虚函数,看这种情况

class AA
{
public:
void dosomething();
}

有时,我想dosomething是这样的
{
while(..)
{
计算很多东西,将结果保存在一个vector的成员变量里
}
}

有时,我想这样
{
while(..)
{
每计算一条,我就显示一条。
}
}


在写这个类的时候都不知道要在哪个控件上显示(因为业务逻辑和软件界面要分开)。
那怎么做呢?

[解决办法]
dosomething
传入一个函数指针,来具体做这件事
[解决办法]
dosomething用一个类来实现,
class dosm;
你这个AA类里有一个dosm的成员变量指针。

dosm* do;
dosomething
{
do->realdo();
}

而这个dosm的具体实现,放在直接要确定用什么平台,在哪儿显示的时候定义。
[解决办法]
虚函数。
想作很多事的,用class B;想做一条写一条的,用class C
在class B的实现里,DoSomething()做很多事,class C的DoSomething()做一条写一条。


class A
{
public:
virtual void DoSomething() = NULL;
};

class B : A
{
public:
void DoSomething();
};

class C : A
{
public:
void DoSomething();
}

[解决办法]
要用链表来遍历这些类的实例并让它们按照要求做事,可以这样(更正一下刚才继承中缺少public的错误):

class A
{
public:
virtual void Do() = NULL;
};

class B : public A
{
public:
void Do() {printf_s("I'm class B\n");}
};

class C : public A
{
public:
void Do() {printf_s("I'm class C\n");}
};

int main()
{
B b1, b2, b3;
C c1, c2, c3;
A* a[6] = {&b1, &b2, &b3, &c1, &c2, &c3};
for (int i = 0; i < 6; ++i)
{
a[i]->Do();
}
system("pause");
}

读书人网 >C++

热点推荐