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

yangbinbin11 2015-05-20 04:16:25
请各位帮忙看下,嵌套类的虚函数继承时如何调用,以及派生类中对嵌套类的虚函数实现过程是否正确。
#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(); 编译不出错,运行报错,未初始化
}

请各位帮忙看下,嵌套类的虚函数继承时如何调用,以及派生类中对嵌套类的虚函数实现过程是否正确。
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangbinbin11 2015-05-21
  • 打赏
  • 举报
回复
引用 9 楼 youjun610789338 的回复:
建议你还是去巩固一下C++类相关的基础知识,系统的学习一下,会少走很多弯路!
恩,好。。。。。。会的,谢谢你哈,我顺道加你关注。。。。。感谢你的回答~
youjun610789338 2015-05-20
  • 打赏
  • 举报
回复
建议你还是去巩固一下C++类相关的基础知识,系统的学习一下,会少走很多弯路!
youjun610789338 2015-05-20
  • 打赏
  • 举报
回复
引用 7 楼 yangbinbin11 的回复:
[quote=引用 4 楼 youjun610789338 的回复:] 你这代码写的很奇葩。。。 修改如下,编译运行通过

#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(); 
};

void C::operate() //operate实现部分,被实现了就不是纯虚函数了
{   
    printf("C 实现虚函数 operate()后的输出\n");
}
int main()
{   
    C *c = new C();
    c->operate();
    
    return 0;
}
拜托大侠再帮帮忙,实在太穷了,没有多少分了。。。。[/quote] 没完全读明白你的疑问,看看这是你需要的不:

#include "stdio.h"

class A
{
public:
    class B
    {
        public:
            virtual void operate()=0;
    };
        
public:     
    B* GetB() {
        return m_b;
    }
    
    void SetB(B* b) {
        m_b = b;
    }
    
private:
    B* m_b;
};

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

void C::operate() //operate实现部分,被实现了就不是纯虚函数了
{   
    printf("C 实现虚函数 operate()后的输出\n");
}

int main()
{
    A a;
    a.SetB(new C());

    A::B *b = a.GetB();
    b->operate();

    return 0;
}
yangbinbin11 2015-05-20
  • 打赏
  • 举报
回复
引用 4 楼 youjun610789338 的回复:
你这代码写的很奇葩。。。 修改如下,编译运行通过

#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(); 
};

void C::operate() //operate实现部分,被实现了就不是纯虚函数了
{   
    printf("C 实现虚函数 operate()后的输出\n");
}
int main()
{   
    C *c = new C();
    c->operate();
    
    return 0;
}
拜托大侠再帮帮忙,实在太穷了,没有多少分了。。。。
yangbinbin11 2015-05-20
  • 打赏
  • 举报
回复
刚才说的不太准确,C类继承了B类,怎样通过GetB()获得继承了B的指针,即,获取C类指针后再强制转化为B类的。。。拜托大侠了。。。。。
yangbinbin11 2015-05-20
  • 打赏
  • 举报
回复
谢谢你啊~~万分感谢~~~因为不熟悉,一直被这一块问题困扰,原谅我的贪心哈~还是想问您下: #include "stdio.h" class A { public: class B { public: virtual void operate()=0; }; B* GetB(); //问题在这里,我怎样才能获得嵌套类的指针,因为它本身是 嵌套抽象类 }; //后面又被继承,我想获得B的指针该怎么办?参数任意填写,有办法吗 class C : public A::B { public: void operate(); //这里继承父类的operate不用写成void A::B::operate(); }; 我怎样才能获得嵌套类B的指针???参数大侠来定义下吧
youjun610789338 2015-05-20
  • 打赏
  • 举报
回复
你这代码写的很奇葩。。。 修改如下,编译运行通过

#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(); 
};

void C::operate() //operate实现部分,被实现了就不是纯虚函数了
{   
    printf("C 实现虚函数 operate()后的输出\n");
}
int main()
{   
    C *c = new C();
    c->operate();
    
    return 0;
}
yangbinbin11 2015-05-20
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
加A::B干嘛
不管是 A::B还是::A,这不是重点,那是当时测试时改的。。。。我现在想去调用实现的纯虚函数,但是出错,请帮帮忙改下这里吧,其他的小毛病就暂且绕过吧。
yangbinbin11 2015-05-20
  • 打赏
  • 举报
回复
不管是 A::B还是::A,这不是重点,那是当时测试时改的。。。。我现在想去调用实现的纯虚函数,但是出错,请帮帮忙改下这里吧,其他的小毛病就暂且绕过吧。
iyomumx 2015-05-20
  • 打赏
  • 举报
回复
class  C :public A::B, A
{
public:
    void operate() override;
};

void C::operate()
{
    printf("C 实现虚函数 operate()后的输出");
}
加A::B干嘛

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧