2013-09-30 50 views
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 
         } 
        } 
    } 
    

注:因为我不能改变超模板是出了问题。

回答

1
  1. 如果隐藏了基类的功能 - 不能覆盖他们,因为他们不是虚拟的 - 你必须记住,某些情况下像通过指针或引用调用基类会不按预期工作,可能会产生“有趣”的结果。如果析构函数是非虚拟的,并且您试图通过指向基类的指针销毁派生对象,那么您也会遇到问题。

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

你可能想看看包裹“基地”类,而不是试图从中得到。

1
  1. 您覆盖虚拟功能。如果不是,你就躲藏起来。

  2. 它是名称隐藏。

  3. 不,你不能。

1
  1. 不,你不能覆盖它们。它将简单地隐藏它们。
  2. 这不是压倒性的,它是隐藏的。
  3. 你不能。