我有以下示例代码:
#include <iostream>
#include <vector>
typedef struct defs
{
std::vector<int> myvec;
} dvec;
typedef struct devdef: public dvec
{
dvec dvec1;
devdef()
{
dvec1.myvec.push_back(10);
}
}myVec;
class A
{
public:
A():v1()
{
std::cout << "my vec size is " << v1.myvec.size() << std::endl;
}
private:
myVec v1;
};
int main()
{
A a1;
}
编译和执行:
$ c++ -std=c++11 try58.cpp
$ ./a.exe
my vec size is 0
我原以为向量的大小是1——为什么同样是0?
dvecs
既是myVec
的父级,也是myVec
的成员。在构造函数中,您将一个值推送到dvec1.myvec
,但在A
中,您读取的是v1.myvec
,也就是父级的成员。您的结构中只有两个dvecs
实例,并且在函数中使用不同的实例。
我认为这个版本可以满足您的需求。
#include <iostream>
#include <vector>
struct dvec
{
std::vector<int> myvec;
}
struct myVec : public dvec
{
myVec()
{
myvec.push_back(10);
}
}
class A
{
public:
A():v1()
{
std::cout << "my vec size is " << v1.myvec.size() << std::endl;
}
private:
myVec v1;
};
int main()
{
A a1;
}
关于我所改变的一些笔记。
- 不需要使用
typedef
来创建新类型。在C++中,class
和struct
都定义了新的类型 - 当从
dvec
派生新类型myVec
时,它包含向量myvec
,因此不需要添加新的向量 - 在派生类型
myVec
的构造函数中,我们可以直接访问基类型的myvec
成员,因为它是该对象的成员