C++ 送儿子而不是父亲的东西

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

我有一个函数,它获取一个对象'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() { 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