一个类的一个成员函数,想有不同的行为
很多人说用虚函数,看这种情况
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");
}