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

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

哔哔one
浏览 116回答 3
3回答

牛魔王的故事

B(1);B(2);B(3);B(4);B(5);这是五个不同的实例,所以只是通过cout<<x<<endl;打印了一下b1没有初始化,所以vector里面没有值,outc不会输出任何东西。如果你希望b1.outc能打印出12345,那就意味着不同的实例要共享数据,可以通过把vector声明问static实现。

白板的微信

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

GCT1015

我试了一下,&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;outc()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;a.size();&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a[i]&nbsp;<<'\t';&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;a(1);&nbsp;&nbsp;&nbsp;&nbsp;a.outc();&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b(2);&nbsp;&nbsp;&nbsp;&nbsp;b.outc();&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;c(3);&nbsp;&nbsp;&nbsp;&nbsp;c.outc();&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;d(4);&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;e(5);&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b1;}&nbsp;这样的输出是:1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;百度居然不给贴图。。。。看出来没,这就是继承的特点会为每一个继承类创建新的数据存储空间,也就是说一个B的对象有一个vector<int>&nbsp;a,而b1对象没有push数据,所有就没有输出!!!
打开App,查看更多内容
随时随地看视频慕课网APP