#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條經(jīng)驗 獲得超3個贊
B(1);
B(2);
B(3);
B(4);
B(5);
這是五個不同的實例,所以只是通過cout<<x<<endl;打印了一下
b1沒有初始化,所以vector里面沒有值,outc不會輸出任何東西。
如果你希望b1.outc能打印出12345,那就意味著不同的實例要共享數(shù)據(jù),可以通過把vector聲明問static實現(xiàn)。

白板的微信
TA貢獻1883條經(jīng)驗 獲得超3個贊
1 現(xiàn)在代碼本來就是能夠正常輸出?。?br/>2 是不是你的預(yù)期是想在 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
TA貢獻1827條經(jīng)驗 獲得超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 百度居然不給貼圖。。。。 看出來沒,這就是繼承的特點會為每一個繼承類創(chuàng)建新的數(shù)據(jù)存儲空間,也就是說一個B的對象有一個vector< int > a,而b1對象沒有push數(shù)據(jù),所有就沒有輸出?。?! |
- 3 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報
0/150
提交
取消