制作程序输出

making out program output

本文关键字:输出 程序      更新时间:2023-10-16

我试图在不运行的情况下计算出程序的输出。我遇到了一些问题,首先当我在const A g1;之后放置断点时,程序如何打印输出const A 2 5?第二,这个代码中的B b1(a1);B b1 = a1;相同吗?第三,当通过参数A的对象构造B obj时,如您所见,A a是A类中的私有成员。p函数不执行。为什么?我认为应该执行。最后一个,当执行(构造)B obj时,应该将"const B"字符串文字打印出来。但是,它只是为B b1(a1);打印的。为什么不同时使用B b2(b1);B b3 = b2;

#include <iostream>
using std::cout;
class A {
public:
    A(int i = 10){ t = i; f(); p("const A ");}
    static void f(){ ++s;}
    void g() { ++t; p("func g ");}
    void operator++() {p("op++ 1 ");}
    void operator++(int) {p("op++ 2 ");}
private:
    void p(const char *t) const
    {cout << t << s << " "
        << this->t << "n";
    }
    int t;
    static int s;
};
const A g1; // Global object

int A::s = 0;
class B {
public:
    B(A& t) : a(t)
    { cout << "const Bn"; }
private:
    A a;
};
class C{
public:
    C(B& t) : b(t)
    {
        cout << "const Cn";
    }
private:
    B b;
};
void h(A a){
    ++a;
    B b(a);
    a++;
}
static C g_c( *(new B(   *(new A(5) )  )   ) );

int main(){
    cout << "--------n";

    {
        A::f();
        A a;
        a.f();  a.g();
    }
    cout << "--------n";
    {
        A a;
        h(a);
    }
    cout << "--------n";
    {
        A a1;
        A a2(a1);
        A a3 = a1;
        a2 = a1;
        cout << "--------n";
        B b1(a1);
        B b2(b1);
        B b3 = b2;
        b2 = b1;
        cout << "--------n";
    }
    cout << "--------n";
    return 0;
}
  • 不能将断点放在函数体之外。那里什么都没有。全局变量在执行main之前进行初始化。如果您想破坏全局A g1的构造,请在A的构造函数中放置一个断点。

  • B b1(a1);确实与B b1 = a1; 相同

  • p函数不执行,因为新的A对象是复制构造的。执行的不是你的构造函数,而是编译器生成的复制构造函数。如果这个复制构造函数没有执行您希望它执行的操作,请编写自己的构造函数。

  • 答案相同,第一个B对象是用你的构造函数构造的,其他对象是复制构造的。