0

我试图继承公共库中定义的类,同时覆盖它的一些函数和成员类型,我有几个问题:

  1. 在超类中没有一个函数被声明为虚拟函数,所以覆盖这些函数仍然可以吗?

  2. 我可以通过简单地声明一个具有相同名称但类型不同的变量来覆盖成员变量吗?这和隐藏一样吗?

  3. 此外,如果 2 是可能的,那么我可以执行以下操作:

    public class A {
      public:
        class Member {
            Member (//some params) {};
        }
    }
    
    class B : public A {
      public:
        class Member : public A::Member {
            Member () :
               A::Member(//some params) 
            {
                // Some additions to B::Member
            }
        }
    }
    

注意:因为我不能改变超类模板是不可能的。

4

3 回答 3

1
  1. 你重写虚函数。如果不是,你就躲起来了。

  2. 这是名字隐藏。

  3. 你不能。

于 2013-09-30T21:49:49.787 回答
1
  1. 不,您不能覆盖它们。它只会隐藏它们。
  2. 它不是压倒一切的,它是隐藏的。
  3. 你不能。
于 2013-09-30T21:50:16.497 回答
1
  1. 如果你隐藏基类的函数——你不能覆盖它们,因为它们不是虚拟的——你必须记住某些场景,比如通过指针调用或对基类的引用将无法按预期工作,并且可能会产生“有趣“ 结果。如果析构函数是非虚拟的并且您试图通过指向基类的指针来销毁派生对象,您也会遇到问题。

  2. 您将隐藏基类的同名成员,但它很可能不会达到您的预期。基类实现仍将引用基类的成员,而派生类的实现将引用派生类的成员。

  3. 不。

您可能想考虑包装“基”类,而不是尝试从它派生。

于 2013-09-30T21:53:27.210 回答