居然写错了!哈哈。谢谢各位大哥的评论阿。这个代码是我以前写的,我还以为是正确的。。。晕了。哈哈
下面的代码是改过以后的,不知道还有没有问题?希望各位多提意见哈
#include <iostream>
using namespace std;
//B
class B
{
public:
?virtual void print()
?{cout << "B" << endl;}
};
class BE : public B
{
public:
?void print()
?{cout << "BE" << endl;}
?void print(int i)
?{cout << "BE:" << i << endl;}
};
//A
class A
{
public:
?void output(int i)
?{
??? ?B * b = new B;
??? ?B * be = new BE;
??? ?b->print();
??? ?be->print();
??? ?be->print(i);//问题出现在这里!!!如改为((BE*)be)->print(i)就OK了。
?}
};
int main()
{
?A a;
?a.output(99);
?
?return 0;
}
--------------------Configuration: test - Debug--------------------
Compiling source file(s)...
test.cpp
test.cpp: In member function `void A::output(int)':
test.cpp:29: error: no matching function for call to `B::print(int&)'
test.cpp:8: note: candidates are: virtual void B::print()
test.exe - 2 error(s), 0 warning(s)
//////////////////////////////////////////////////////////////////////////////////////////////////////
以下代码有问题!
//////////////////////////////////////////////////////////////////////////////////////////////////////
c++不支持双分派(double
dispatch)和多分派(multi-dispatch),只支持单分派(single
dispatch)。一个典型的不支持双分派的例子如下所示:
#include <iostream>
using namespace std;
class B
{
public:
?virtual void print()
?{cout << "c" << endl;}
};
class E1 : public B
{
public:
?void print()
?{cout << "E1" << endl;}
};
class E2 : public B
{
public:
?void print()
?{cout << "E2" << endl;}
};
class A
{
public:
?virtual void output(B* p)
?{cout << "A" <<
endl;p->print();}
};
class D1 : public A
{
public:
?void output(B* p)
?{cout << "D1" <<
endl;p->print();}
};
class D2 : public A
{
public:
?void output(B* p)
?{cout << "D2" <<
endl;p->print();}
};
void f(A* p, B* q)
{
?p->output(q);
}
int main()
{
?A * pd1 = new D1;
?B * pe1 = new E1;
?
?f(pd1, pe1);
?
?end:
?int end;
?cin >> end;
?return 0;
}