关于C++的嵌套类,嵌套类里面含有纯虚函数,且被继承,主函数如何调用的问题
请各位帮忙看下,嵌套类的虚函数继承时如何调用,以及派生类中对嵌套类的虚函数实现过程是否正确。#include"stdio.h"classA//A中嵌套B{public: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;
}
因为不熟悉,所以写错了,大家引以为戒~ 展开
#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;
}
因为不熟悉,所以写错了,大家引以为戒~ 展开
若以下回答无法解决问题,邀请你更新回答
展开全部
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");
}
{
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");
}
追问
你写的好乱。。。。。其实回答问题突出重点就好了,感谢你的回答。。。。我的问题解决了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询