C++ 送儿子而不是父亲的东西
我有一个函数,它获取一个对象'a',它被称为:C++ 送儿子而不是父亲的东西,c++,inheritance,C++,Inheritance,我有一个函数,它获取一个对象'a',它被称为:func。我给它发了一个B的对象 它不应该激活B的构造函数吗?因为我发送了一个B的对象,虽然我必须发送一个A的对象。我真的不知道为什么这个函数会打印: A() DESTRUCTOR A 而不是: CONSTRUCTOR A CONSTRUCTOR B B() DESTRUCTOR B DESTRUCTOR A 因为func得到A而不是A&A,所以它不必乘以对象B吗 这是我的代码: class A { public: A() { cou
func
。我给它发了一个B的对象
它不应该激活B的构造函数吗?因为我发送了一个B的对象,虽然我必须发送一个A的对象。我真的不知道为什么这个函数会打印:
A()
DESTRUCTOR A
而不是:
CONSTRUCTOR A
CONSTRUCTOR B
B()
DESTRUCTOR B
DESTRUCTOR A
因为func
得到A
而不是A&A
,所以它不必乘以对象B吗
这是我的代码:
class A
{
public:
A() { cout << "CONSTRUCTOR A\n"; }
~A() { cout << "DESTRUCTOR A\n"; }
virtual void f() { cout << "A()" << endl; }
};
class B: public A
{
public:
B() { cout << "CONSTRUCTOR B\n"; }
~B() { cout << "DESTRUCTOR B\n"; }
virtual void f() { cout << "B()" << endl; }
};
void func(A a) {
a.f();
}
int main() {
B b;
func(b);
return 0;
}
A类
{
公众:
A(){cout因为如果您发送了son,但函数要求父类,那么它会将子类视为父类
class A
{
public:
A() { cout << "CONSTRUCTOR A\n"; }
~A() { cout << "DESTRUCTOR A\n"; }
virtual void f() { cout << "A()" << endl; }
};
class B: public A
{
public:
B() { cout << "CONSTRUCTOR B\n"; }
~B() { cout << "DESTRUCTOR B\n"; }
virtual void f() { cout << "B()" << endl; }
};
void func(B a) {
a.f();
}
int main() {
B b;
func(b);
return 0;
}
A类
{
公众:
A(){cout我认为您感到困惑的原因是,您是通过值而不是指针传递的。这就是为什么B对象被视为A,因为func默认将对象视为A,这也意味着调用了错误的析构函数。运行此代码,您会更好地理解
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "CONSTRUCTOR A\n"; }
~A() { cout << "DESTRUCTOR A\n"; }
virtual void f() { cout << "A()" << endl; }
};
class B: public A
{
public:
B() { cout << "CONSTRUCTOR B\n"; }
~B() { cout << "DESTRUCTOR B\n"; }
virtual void f() { cout << "B()" << endl; }
};
void func(A * a) {
a->f();
}
int main() {
B * b = new B();;
cout << "\n";
func(b);
cout << "\n";
delete b;
return 0;
}
#包括
使用名称空间std;
甲级
{
公众:
A(){cout