gpt4 book ai didi

c++ - 将派生类构造函数分配给基类指针

转载 作者:行者123 更新时间:2023-11-28 00:01:25 24 4
gpt4 key购买 nike

我试图理解虚函数,并遇到了以下代码。

class Base
{
public:
void Method1 () { std::cout << "Base::Method1" << std::endl; }
virtual void Method2 () { std::cout << "Base::Method2" << std::endl; }
};

class Derived : public Base
{
public:
void Method1 () { std::cout << "Derived::Method1" << std::endl; }
void Method2 () { std::cout << "Derived::Method2" << std::endl; }
};

Base* obj = new Derived ();
// Note - constructed as Derived, but pointer stored as Base*

obj->Method1 (); // Prints "Base::Method1"
obj->Method2 (); // Prints "Derived::Method2"

到最后,如何用派生类构造函数初始化基类指针?

最佳答案

C++ 允许从派生指针类型隐式转换为基指针类型。这是安全的,因为派生类型的内存布局与基类相同,直到基类的大小为止。

但是你的例子有一个潜在的错误,因为你已经忘记了 obj 的真实类型。当需要删除它时,您将调用错误的析构函数。这可以通过将析构函数设为虚拟来解决。

关于c++ - 将派生类构造函数分配给基类指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com