欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++继承细节 -1

程序员文章站 2022-06-30 18:58:29
为什么基类析构函数最好要使用 virtual 进行修饰? 执行 后,如果A类中的析构函数为虚函数;则先调用B类中的析构函数在调用A类中的析构函数;否则只调用A类中的析构函数。 派生类重新定义基类中的虚方法 规则 1. 确保与原来的类型完全相同(参数、参数类型、参数顺序、方法名), 如果方法返回类型为 ......
  • 为什么基类析构函数最好要使用 virtual 进行修饰?

    class A {
    private:
    ......
    public:
    ~A();
    A() {}
    };
    class B : public A {
    private:
    ......
    public:
    ~B();
    B() {}
    };
    A *aPtr = new B;

    执行delete aPtr后,如果A类中的析构函数为虚函数;则先调用B类中的析构函数在调用A类中的析构函数;否则只调用A类中的析构函数。

  • 派生类重新定义基类中的虚方法 规则
    1. 确保与原来的类型完全相同(参数、参数类型、参数顺序、方法名), 如果方法返回类型为基类指针或引用则将其改为指向派生类指针或引用。

      class A {
      ......
      public:
      A() {}
      ~A() {}
      virtual A *getInstance();
      };
      class B public A {
      ......
      public:
      B() {}
      ~B() {}
      virtual B *getInstance();
      };
    2. 如果基类中的虚方法被重载,则在派生类中应重新定义全部重载版本,否则将隐藏其他版本。

      class A {
      ......
      public:
      A() {}
      ~A() {}
      virtual A *getInstance();
      virtual A *getInstance(int a);
      virtual A *getInstance(double d);
      };
      class B public A {
      ......
      public:
      B() {}
      ~B() {}
      virtual B *getInstance();
      virtual B *getInstance(int a);
      virtual B *getInstance(double d);
      };