【问题标题】:How the constructor is working within another class构造函数如何在另一个类中工作
【发布时间】:2020-03-20 17:49:58
【问题描述】:

这是在另一个类中使用静态类对象以及范围解析运算符现在我不确定静态对象或范围解析运算符是否是也调用来自不同类的构造函数的原因。 代码是:

class A
{
    public:
        A()
        {
            cout<<"A's constructor"<<endl;
        }
};
class B
{
    static A a;
    public:
        B()
        {
            cout<<"B's constructor";
        }
        static A get()
        {
            return a;
        }
};
A B :: a;

因此与主要部分一起

int main()
{
    B b;

    A a1=b.get();

    A a2=b.get();

    A a3=b.get();

}

这是输出:

A's constructor
B's constructor

另一个查询是get函数是否真的在做任何事情?

【问题讨论】:

  • 让您感到困惑的部分是什么?静态初始化发生在进入main之前,初始化B::A(调用A的ctor),然后进入main,构造B b。其余的 A 对象(a1、a2 和 a3)调用复制构造函数。
  • 您的代码中没有继承。这个问题还不清楚
  • 您还期待什么其他输出,为什么?

标签: c++ inheritance constructor static default-constructor


【解决方案1】:

在类 A 中再定义一个构造函数,即复制构造函数。例如

A( const A & ) { cout << "A's copy constructor" << endl; }

你会得到以下输出

A's constructor
B's constructor
A's copy constructor
A's copy constructor
A's copy constructor

也就是调用第一个构造函数来创建类A的静态对象到它的定义中

A B :: a;

然后在 main 中创建了一个 B 类型的对象。然后对这些语句进行离子化

A a1=b.get();

A a2=b.get();

A a3=b.get();

使用复制构造函数创建了三个 A 类型的对象。

【讨论】:

  • 你能补充一点关于 A B:: a; ??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2014-08-01
  • 2010-09-22
  • 2012-06-22
相关资源
最近更新 更多