关于C++的嵌套类,嵌套类里面含有纯虚函数,且被继承,主函数如何调用的问题

请各位帮忙看下,嵌套类的虚函数继承时如何调用,以及派生类中对嵌套类的虚函数实现过程是否正确。
#include "stdio.h"
class A //A 中嵌套 B
{
public:
class B //嵌套类B 重点!
{
public:
virtual void operate()=0; // B类中有纯虚函数!!!!
};
};
class C:public A::B,A // 也可以单独继承A::B
{
public:
void A::B::operate(); //派生类对基类纯虚函数进行声明,若不声明,C也为抽象类
};

void C::A::B::operate() //纯虚函数实现部分
{
printf("C 实现虚函数 operate()后的输出");
}
int main() //operate()函数调用 有问题!
{
C *c; //问题:C *c=new C(); c->operate(); 编译出错
c->operate(); // C c ; c.operate(); 编译出错

// C *c; c->operate(); 编译不出错,运行报错,未初始化
}

请各位帮忙看下,嵌套类的虚函数继承时如何调用,以及派生类中对嵌套类的虚函数实现过程是否正确。
问题已解决:

给网友们看下,遇到问题可以解决下:
#include "stdio.h"

class A
{
public:
class B
{
public:
virtual void operate()=0;
};
};

class C : public A::B
{
public:
void operate(); //这里继承父类的operate不用写成void A::B::operate(); 问题1

};

void C::operate() //operate实现部分,被实现了就不是纯虚函数了 问题2

{
printf("C 实现虚函数 operate()后的输出\n");
}
int main()
{
C *c = new C();
c->operate();

return 0;
}
因为不熟悉,所以写错了,大家引以为戒~

第1个回答  推荐于2016-05-10
void C::A::B::operate() //纯虚函数实现部分
{
printf("C 实现虚函数 operate()后的输出");
}

这个是A里面的嵌套类B的operate的实现,并不是C里面的operate的实现。相当于:

class A //A 中嵌套 B
{
public:
class B //嵌套类B 重点!
{
public:
virtual void operate()=0 { printf("C 实现虚函数 operate()后的输出"); } // B类中有纯虚函数!!!!
};
};

所以你 C里面的operate()并没有实现。只需另外加上实现即可:
void C::operate() //纯虚函数实现部分
{
printf("Drive output\n");
}追问

你写的好乱。。。。。其实回答问题突出重点就好了,感谢你的回答。。。。我的问题解决了。

本回答被提问者采纳
相似回答