批评这个c ++代码

Jag*_*ath 1 c++

类似于下面编写的代码存在于生产中.你们有人可以审查它并告诉我这些代码是否一直运行良好.

class Base
{
    public:
        virtual void process() = 0;
};

class ProductA : public Base
{
    public:
    void process()
    {
        // some implementation.
        doSomething();
    }

    void setSomething(int x)
    {

    }

    virtual void doSomething()
    {
         // doSomething.
    }

};

class ProductANew : public ProductA
{
    public:
        ProductANew() : ProductA() { }
        void doSomething()
        {
           // do Something.
        }
};


int main(int argc, char *argv[])
{
    Base* bp = new ProductANew();
    dynamic_cast<ProductA*>(bp)->setSomething(10);
    bp->process();
}
Run Code Online (Sandbox Code Playgroud)

小智 19

一些问题:

  • 基类必须具有虚拟析构函数
  • 你永远不会删除用new分配的对象
  • 你永远不会测试dynamic_cast的结果


sha*_*oth 7

有了良好的设计,你就不需要了dynamic_cast.如果process()没有先调用就无法调用setSomething()它们应该在同一个基类中公开.