为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下,我该如何使outc()函数正常输出?

请教一下,我该如何使outc()函数正常输出?

C++
哔哔one 2022-12-08 13:09:11
#include<iostream>#include<vector>using namespace std;class A{protected: vector<int> a;public:A(){};A(int x){}; virtual void outc(){};};class B:public A{public:B(){};B(int x){cout<<x<<endl;a.push_back(x);}void outc(){for(int i=0;i<a.size();i++)cout<<a[i]<<" ";} };int main(){B(1);B(2);B(3);B(4);B(5);B b1;b1.outc();return 0;}
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

B(1);
B(2);
B(3);
B(4);
B(5);
这是五个不同的实例,所以只是通过cout<<x<<endl;打印了一下

b1没有初始化,所以vector里面没有值,outc不会输出任何东西。

如果你希望b1.outc能打印出12345,那就意味着不同的实例要共享数据,可以通过把vector声明问static实现。

查看完整回答
反对 回复 2022-12-10
?
白板的微信

TA贡献1883条经验 获得超3个赞

1 现在代码本来就是能够正常输出!!
2 是不是你的预期是想在 b1.outc()的时候输出“1 2 3 4 5 ”??
如果是这样:
把vector<int> a; 修改为: static vector<int> a;

并且在类A后增加一句: vector<int> A::a ;
这样能能在b1.outc()的时候输出: 1 2 3 4 5

查看完整回答
反对 回复 2022-12-10
?
GCT1015

TA贡献1827条经验 获得超4个赞

我试了一下,


    void outc()    {        for(int i = 0; i < a.size(); i++)        cout << a[i] <<'\t';        int main(){    B a(1);    a.outc();    B b(2);    b.outc();    B c(3);    c.outc();    B d(4);    B e(5);    B b1;} 这样的输出是:1     2      3     百度居然不给贴图。。。。看出来没,这就是继承的特点会为每一个继承类创建新的数据存储空间,也就是说一个B的对象有一个vector<int> a,而b1对象没有push数据,所有就没有输出!!!



查看完整回答
反对 回复 2022-12-10
  • 3 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信