首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于回来*this的成员函数

2014-01-01 
关于返回*this的成员函数我定义了一个基类base和一个派生类derive,其中基类有几个成员函数(假设为a,b)返回

关于返回*this的成员函数
我定义了一个基类base和一个派生类derive,其中基类有几个成员函数(假设为a,b)返回*this,派生类也定义了几个成员函数(假设为c,d)。
现在我定义了一个派生类对象,先调用基类中定义的成员函数,返回*this,但是返回的这个是基类对象,不能调用派生类的成员函数,所以不能写成 derive.a().b().c(); 这种形式。
请问,如何修改程序,使derive.a().b().c()这种语句是合法的呢?
[解决办法]

引用:
成员函数返回类型改为引用即可。

base& a()
{
  return *this;
}
Derived derived;
derived.a().MemberFunc(); //MemberFunc调用的是derived的成员函数,注:这里MemberFunc需要在基类与派生类中都为virtual接口。
[解决办法]

class Base
{
public:
Base* a()
{
return this;
}

virtual ~Base() 
{
}
};

class Derive : public Base
{
public:
void c()
{
std::cout << "Derive c" << std::endl;
}
};

int main(int argc, char *argv[])
{
Derive *d = new Derive();
dynamic_cast<Derive*>(d->a())->c();

system("pause");
}

热点排行