一个老的趋势笔试题,求正解
1.8 Which virtual function redeclarations of the Derived class are correct?
a. Base* Base::copy(Base*);
Base* Derived::copy(Derived*);
b. Base* Base::copy(Base*);
Derived* Derived::copy(Base*);
c. ostream& Base::print(int,ostream&=cout);
ostream& Derived::print(int,ostream&);
d. void Base::eval() const;
void Derived::eval();
-----------------------
我的测试程序:
#include <iostream>
using namespace std;
class Base
{
public:
virtual Base* diffArgument(Base* temp)
{
cout<< "base.diffArgument\n";
return NULL;
}
virtual Base* diffReturn(Base* temp)
{
cout<< "base.diffReturn\n";
return NULL;
}
virtual ostream& print(int temp,ostream& out=cout)
{
cout<< "base.print\n";
return out;
}
virtual void eval() const
{
cout<< "base.eval\n";
}
};
class Derived:public Base
{
public:
Base* diffArgument(Derived* temp)
{
cout<< "Derived.diffArgument\n";
return NULL;
}
Derived* diffReturn(Base* temp)
{
cout<< "Derived.diffReturn\n";
return NULL;
}
ostream& print(int temp,ostream& out)
{
cout<< "Derived.print\n";
return out;
}
//not overwrite
void eval()
{
cout<< "Derived.eval\n";
}
};
int main(void)
{
Base* p = new Derived();
p->diffArgument(p);
p->diffReturn(p);
p->print(0, cout);
p->eval();
return 0;
}
结果是b、c都对,疑惑之
base.diffArgument
Derived.diffReturn
Derived.print
base.eval