我尝试在不运行的情况下计算出程序的输出。当我在const A g1;
之后放置断点时,我首先遇到了一些问题,程序如何打印输出const A 2 5
?其次,此代码中B b1(a1);
与B b1 = a1;
相同?第三,当B
obj通过参数A
的对象构建时,如您所见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 B\n"; }
private:
A a;
};
class C{
public:
C(B& t) : b(t)
{
cout << "const C\n";
}
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;
}
答案 0 :(得分:0)
您不能在函数体外部放置断点。那里什么都没有。在执行main
之前初始化全局变量。如果你想打破全局A g1
的构造,在A的构造函数中放置一个断点。
B b1(a1);
确实与B b1 = a1;
p
函数未执行,因为新的A对象是复制构造的。执行的不是构造函数,而是编译器生成的复制构造函数。如果这个复制构造函数没有按照您的意愿执行,请编写自己的。
同样的答案,第一个B对象是用你的构造函数构造的,其他的是复制构造的。