类构造函数如何在C+中工作+; 我看到了关于构造函数的在线C++测试。我能找出大部分答案,但对下面的一些问题感到困惑。希望有人能帮我

类构造函数如何在C+中工作+; 我看到了关于构造函数的在线C++测试。我能找出大部分答案,但对下面的一些问题感到困惑。希望有人能帮我,c++,C++,下面是一个例子 #include <iostream> class A { public: A(int n = 0) : m_n(n) { std::cout << 'd'; } A(const A& a) : m_n(a.m_n) { std::cout << 'c';

下面是一个例子

#include <iostream>

class A {
    public:
            A(int n = 0) : m_n(n) {
                    std::cout << 'd';
            }

            A(const A& a) : m_n(a.m_n) {
                    std::cout << 'c';
            }

    private:
            int m_n;
};

void f(const A &a1, const A &a2 = A())
{
}

int main() {
    A a(2), b;
    const A c(a), &d = c, e = b;
    b = d;
    A *p = new A(c), *q = &a;
    static_cast<void>(q);
    delete p;
    f(3);
    std::cout << std::endl;

    return 0;
}
#包括
甲级{
公众:
A(int n=0):m_n(n){

std::cout这些没有输出,因为
d
q
不是
A
类型,即它们不是
A
对象。
d
是对
A
的引用,
q
是指向
A
的指针。初始化引用并初始化或分配指针不会操纵引用rred指向/指向一个
对象,因此没有输出


为了解决您的问题-没有什么可以“使其工作”,它的工作原理与它应该的一样。

&d=c
不会输出任何内容,因为您没有调用构造函数

如果我们稍微扩展一下代码片段

A &d = c
代码所说的是“将
d
声明为对类型为a的对象的引用,该对象指向
c
”。因为您正在创建引用,所以您没有调用构造函数,
c
d
是同一个对象


这同样适用于
q
,但不是创建引用,而是创建一个指针并为其分配
a
类型的现有实例的地址。不会调用构造函数,因为您没有创建单独的对象,而是链接到现有的对象。

更清楚地说,我将重写此语句

const A c(a), &d = c, e = b;
作为

这里,d被声明为对a类型对象的引用。它不创建新对象。它引用的是已创建的对象。在这种情况下,d引用的是c。事实上,d只是对象c的别名

此代码段

A *p = new A(c), *q = &a;
为了简单起见,也可以重写

A *q = &a;

在此语句中,指针q仅由a的地址分配。未创建任何对象。现在,指针q指向已创建的早期对象a。

谢谢。立即清除。:-)
A *q = &a;