class A {
public:
A(void) { cout << "A::A" << endl; }
A(const A& a) { cout << "A::A(a)" << endl; }
virtual ~A(void) { cout << "A::~A" << endl; }
virtual void g(void) { cout << "A::g" << endl; }
};
class B : public A {
public:
B(void) { cout << "B::B" << endl; }
~B(void) { cout << "B::~B" << endl; }
void g(void){ cout << "B::g" << endl; }
};
void print(A c) {
cout << "print" << endl;
}
int main(void) {
A a;
B b;
A* c = &b;
c->g();
print(*c);
return 0;
}
我不明白为什么在调用 c->g()
或 print(*c );
而且我不太确定方法打印属于程序的哪一部分?
最佳答案
由于您按值将参数传递给 print
函数,因此必须使用复制构造函数进行复制。这就是为什么在调用 print
时调用复制构造函数的原因。
如果您更改为调用 be reference(或通过传递指针),则不会进行任何复制。
正如其他人所说,print
是一个“普通”函数,也称为“自由”函数,或非成员函数。它“属于”程序,并且存在于全局范围 并且具有external linkage .
关于c++ - 为什么以及何时执行重载构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175331/