我认为我有数据切片的问题,但我不知道如何解决这个问题。
这里我只有一个子类(B),但实际上我有其他子类(没有j
作为成员)。
这是我的代码:
helloworld.h
#ifndef HELLOWORLD_H_
#define HELLOWORLD_H_
class A {
public:
A(): i(5) {}
int i;
};
class B: public A {
public:
B(): A(), j(2) {}
int j;
};
#endif /* HELLOWORLD_H_ */
helloworld.cpp
#include <iostream>
#include <vector>
#include "helloworld.h"
using namespace std;
int main() {
vector<A*> v;
v.push_back(new B());
v.push_back(new B());
vector<A*>::iterator it = v.begin();
++it;
cout << (*it)->j;
return 0;
}
答案 0 :(得分:1)
除了@ interjay的评论:
C ++无法正常工作。您的A
类不知道子类将具有哪种类型的变量,因此无法访问它们。您可以使用虚拟功能。
部首:
#ifndef HELLOWORLD_H_
#define HELLOWORLD_H_
class A {
public:
A(): i(5) {}
virtual int GetJ () const = 0 ;
private:
int i;
};
int A::GetJ () const {
// Throw exception or return an error.
}
class B: public A {
public:
B(): A(), j(2) {}
int GetJ () const ;
private:
int j;
};
int B::GetJ () const {
return j ;
}
#endif /* HELLOWORLD_H_ */
主:
#include <iostream>
#include <vector>
#include "helloworld.h"
using namespace std;
int main()
{
vector<A*> v;
v.push_back(new B());
v.push_back(new B());
vector<A*>::iterator it = v.begin();
cout << (*it)->GetJ () ;
// Don't forget to clean up memory allocations,
// or better yet, use smart pointers.
return 0;
}