【发布时间】:2020-05-23 17:33:12
【问题描述】:
请注意,在此示例中,我创建了一个派生类指针 (Laser* pLaser = new Laser),而不是像 (Boat* pLaser = new Laser) 这样的基类指针。改为创建基类指针有优势吗?谢谢!
#include <iostream>
using namespace std;
class Boat
{
protected:
int length;
public:
int getLength() { return length; }
virtual void Model() = 0;
};
class Sailboat : public Boat
{
protected:
int mast;
public:
int getMast() { return mast; }
virtual void Boom() = 0;
};
class Laser : public Sailboat
{
public:
Laser() { mast = 19; length = 35; }
~Laser();
void Model() { cout << "Laser Classic" << endl; }
void Boom() { cout << "Boom: 14 ft" << endl; }
};
int main()
{
Laser* pLaser = new Laser;
pLaser -> Model();
cout << "Length: " << pLaser -> getLength() << "ft" << endl;
cout << "Height: " << pLaser -> getMast() << "ft" << endl;
pLaser -> Boom();
return 0;
}
【问题讨论】:
-
Base b = Derived(注意隐式转换)技术在您需要存储多个指针时可能很有用,所有这些指针都指向基派生类实例。我想不出一个有用的案例来创建Base b = new Derived() -
好吧,如果您将
new的结果分配给基类指针,您将无法在不触发未定义行为的情况下对其进行delete。要获得额外的功劳,您可以找出原因以及如何解决。 -
感谢您的意见!现在有意义
标签: c++ oop pointers polymorphism