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

C++语言 码拜 10年前 (2015-05-11) 1637次浏览 0个评论

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

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

class  C :public A::B, A
{
public:
    void operate() override;
};

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

加A::B干嘛

不管是 A::B还是::A,这不是重点,那是当时测试时改的。。。。我现在想去调用实现的纯虚函数,但是出错,请帮帮忙改下这里吧,其他的小毛病就暂且绕过吧。
引用 1 楼 iyomumx 的回复:

加A::B干嘛

不管是 A::B还是::A,这不是重点,那是当时测试时改的。。。。我现在想去调用实现的纯虚函数,但是出错,请帮帮忙改下这里吧,其他的小毛病就暂且绕过吧。

10分
你这代码写的很奇葩。。。

修改如下,编译运行通过

#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;
}
谢谢你啊~~万分感谢~~~因为不熟悉,一直被这一块问题困扰,原谅我的贪心哈~还是想问您下:
#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的指针???参数大侠来定义下吧
刚才说的不太准确,C类继承了B类,怎样通过GetB()获得继承了B的指针,即,获取C类指针后再强制转化为B类的。。。拜托大侠了。。。。。
引用 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;
}

拜托大侠再帮帮忙,实在太穷了,没有多少分了。。。。

5分
引用 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;
}

拜托大侠再帮帮忙,实在太穷了,没有多少分了。。。。

没完全读明白你的疑问,看看这是你需要的不:

#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;
}
5分
建议你还是去巩固一下C++类相关的基础知识,系统的学习一下,会少走很多弯路!
引用 9 楼 youjun610789338 的回复:

建议你还是去巩固一下C++类相关的基础知识,系统的学习一下,会少走很多弯路!

恩,好。。。。。。会的,谢谢你哈,我顺道加你关注。。。。。感谢你的回答~


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C++的嵌套类,嵌套类里面含有纯虚函数,且被继承,主函数如何调用的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!