继承的构造函数
Inherit constructor
我有一个名为myGraph
的类,它派生自graph
如果在调用构造函数时知道顶点的数量,就可以使用下面的构造函数。
myGraph(int numOfV) : graph(numOfV)
{
// initialize...
}
我想计算构造函数中的顶点数,然后在构造函数中继承graph
。怎么做呢?
myGraph(int a, int b)
{
/* using a,b to initialize...
a sequence of push operation on (vector<T>)verticeList */
int numOfV = this->verticeList.size();
// inherit...
myGraph(numOfV); // it will not work
}
请注意
我用来计算顶点数的程序很复杂。(多行代码而不是
a+b
)顶点的数量取决于
myGraph
的实例变量,所以我需要先初始化myGraph
的成员,然后继承剩余的graph
部分。
如果有很多逻辑在进行预初始化,你可以在一个方法中分离它们:
struct myGraph
{
myGraph(int a, int b) : graph(myGraph::computeNoVertices(a,b))
{
}
static int computeNoVertices(int a, int b)
{
//whole chunk of code
}
};
必须在派生类的成员初始化列表中调用基类构造函数:
myGraph(int a, int b) :graph(a +b)
{ //^^It is OK to do computation when you pass parameters to
//base class constructor
// do something...
}
在c++ 11中,您可以执行有限数量的操作:
myGraph(int a, int b)
: myGraph(a+b)
{
}
如果你的计算要复杂得多,你会想把它们分解成一个单独的函数:
myGraph(int a,int b)
: myGraph(calculateNumOfV(a,b))
{
}
顶点的数量取决于myGraph中的实例变量,所以我需要先初始化myGraph的成员,然后继承剩下的图部分。
那不可能。基类总是在数据成员之前初始化。然而,在构造过程中,分配给成员的值仅取决于构造函数参数,因此基类的构造函数参数也仅取决于这些参数。
假设你有成员m1
和m2
,并且想用依赖于这两个成员的值初始化基类,比如f(m1,m2)
和g(m1,m2)
。你的构造函数有参数a
, b
, c
,你初始化m1
和m2
依赖于这些参数,x(a,b,c)
和y(a,b,c)
。然后该元素看起来应该像这样:
class Foo : Bar {
int m1;
int m2;
static int x(int a, int b, int c);
static int y(int a, int b, int c);
public:
Foo(int a, int b, int c)
: Bar( f(x(a,b,c), y(a,b,c)), g(x(a,b,c), y(a,b,c)) )
, m1(x(a,b,c))
, m2(y(a,b,c))
{}
};
当然,为了提高可读性,您可以创建更多的静态函数来计算基对象的初始化式:
class Foo : Bar {
/* ... */
static Bar calcBar(int a, int b, int c) {
int i1 = x(a,b,c);
int i2 = y(a,b,c);
return Bar(f(i1,i2), g(i1,i2));
}
public:
Foo(int a, int b, int c)
: Bar( calcBar(a,b,c) )
, m1(x(a,b,c))
, m2(y(a,b,c))
{}
};
相关文章:
- 具有相同名称的类的构造函数继承
- 多复制构造函数继承中的惊人行为
- CRTP 和复制/移动赋值/构造函数继承
- 复制构造函数继承动态分配的数组
- 无法从 c++ 中的构造函数继承
- 在构造函数继承中使用默认构造函数
- 构造函数继承和直接成员初始化
- C++ - 使用私有参数的构造函数继承
- 通过可变参数模板进行C++11构造函数继承
- C++11构造函数继承和不带参数的构造函数
- C++11 - 构造函数继承
- C++构造函数继承
- 使用 C++11 编译器的构造函数继承正在生成错误
- 选择性构造函数继承"Ambiguous resolution"错误
- 什么是构造函数继承
- C++对象中的构造函数继承与方法继承
- C++构造函数继承没有匹配的函数
- C++构造函数继承(从派生类调用构造函数)
- 模板构造函数继承的标准符合语法是什么
- C++构造函数继承错误