"实例化派生类对象" - C ++

时间:2016-04-25 11:27:45

标签: c++ constructor derived-class

我是C ++的新手,并且学习了这门语言的基础知识。我在一本书中读到了这一行"实例化派生类对象开始了一系列构造函数调用"。有人可以解释一下这个陈述的含义是什么吗?书中没有给出解释。请帮忙。

4 个答案:

答案 0 :(得分:3)

这意味着如果您有基类和派生类:

struct A
{
   A() { std::cout << "constructing A\n"; }
};

struct B : A
{
   B() { std::cout << "constructing B\n"; }
};

然后实例化派生类:

int main()
{
   B b;
}

不仅为派生类调用构造函数,还为基类调用构造函数:

constructing A
constructing B

并且自动调用的构造函数的这个“链”越长,你拥有的基数越多(即继承树越深)。

答案 1 :(得分:1)

您可以尝试定义对象层次结构,并自己观察构造函数执行的效果。这是一个人为的例子:

#include <iostream>

struct A
{
    A(int nValue) {
        std::cout << "A: " << nValue << std::endl;
    }
};

struct B: public A
{
    B(int nValue, double dValue)
    : A(nValue) {
        std::cout << "B: " << dValue << std::endl;
    }
};

struct C: public B
{
    C(int nValue, double dValue, char chValue)
    : B(nValue, dValue) {
        std::cout << "C: " << chValue << std::endl;
    }
};

int main()
{
    C cClass(5, 4.3, 'R');
    return 0;
}

你能想象更复杂的层次结构吗?其他类型的构造函数会发生什么?破坏者怎么样?

答案 2 :(得分:0)

派生类是从另一个类继承的类。我想你在某种程度上熟悉了继承。派生类继承基类的构造函数,您只需“覆盖”它。因此,当您从派生类中实例化一个对象时,首先调用基类的构造函数,然后调用派生类的构造函数。

答案 3 :(得分:0)

instantiate创建实例的内容:

  

实例化

     

...

     

(传递)用具体实例表示(某事)。

在像C ++这样的基于类的语言中,你有 classes ,它们充当蓝图,然后你有对象,它们是特定类的实例。

例如,假设您有一个班级A。如果您随后声明了类a的对象A,那么您实例化A的对象。