2012-12-04 194 views

回答

1

来源:http://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/node12.html

有支持重用亚型和子类之间的重要区别。子类允许重用类内的代码 - 实例变量声明和方法定义。因此它们在支持类内的代码重用方面很有用。另一方面,子类型有助于支持外部重用,从而产生多态的形式。也就是说,一旦数据类型被确定为另一类型的子类型,则可应用于超类型的元素的任何函数或过程也可以应用于子类型的元素。

您应该阅读完整的文章。

+3

就像下面的问题所指出的那样,这个术语在C++中并不典型 - 您不应该使用它,否则会冒着让人困惑的风险。 –

+0

特别是因为C++不是“唯一”的面向对象,所以有模板这样的东西 - 它可以“适用于任何函数或过程”,支持它的任何类型,作为公共基类的子类型/子类。因此,在尝试将学术术语应用于现实生活时要小心。 – DevSolar

4

C++将子类称为“派生类”。

在C++中,类是类型,唯一的“子类型”是派生类。所以如果你选择使用与C++有关的“subtype”和“subclass”这两个词,它们可能是同一个东西。根据你的学术背景,我想你可能会说私人继承不是创建一个子类型,在这种情况下它们是不同的。对于这个问题,在一些学术语境中,“子类型”的概念是不合法的(形式类型理论在面向对象之前就存在了,在计算机科学之前,除非你指望巴贝奇)。

在C++ 11可以测试是否AClass被派生类的Another(任选地排除其中它们是相同的类的情况下):

std::is_base_of<Another, AClass>::value && !std::is_same<Another, AClass>::value 

该表达式为真,即使继承私人的。

+0

我认为“const T *”是“T *”的子类型 –

+0

然后根据“子类型”的合适定义编写答案:-) –

-3

类是由程序员定义的新类型,所以我认为子类==子类型。

史蒂夫杰索普写道:

C++是指一个子类为 “派生类”。

我认为没有。子类是类内的类(如引擎是汽车的一部分)。

请看下面的例子:

#include <iostream> 

using namespace std; 

class Car 
{ 
    public: 
    class Engine //Engine is subclass 
    { 
     public: 
     static void Start() 
     { 
       cout << "Engine is starting... \n"; 
     }  
    }; 
}; 

class Animal 
{ 
    public: 
    static void Eat() 
    { 
      cout << "Animal is eating... \n"; 
    }  
}; 

class Wolf : Animal //Wolf is derived class 
{ 
     public: 
     static void Howl() 
     { 
      cout << "Wolf is howling... \n"; 
     } 
}; 

int main() 
{ 
    Car::Engine::Start(); 
    Animal::Eat(); 
    Wolf::Howl(); 

    system("PAUSE"); //keep Console Window open in Debug Mode 
    return 0; 
} 
+1

您对_nested classes_产生混淆。 – AProgrammer

+1

对不起。我来自波兰,我不知道“嵌套”这个词。 – David

2

那些是理论概念,而不是C++之一。但让我们看看它们如何应用于C++。

  • 继承通过从另一继承指的是新类型的形成。 C++提供该机制并调用子类“派生类”。

  • 子类型指在预期类型值的地方使用子类型值的可能性。在C++中,你可以认为公有继承意味着一种子类型关系,或者你可能更具限制性,并且只考虑虚拟函数覆盖确保尊重LSP的情况。考虑到私有或受保护的继承没有(但仍然是子类化的情况)是合理的,无论您是否使用虚拟函数覆盖。

所以,像往常一样,精确的定义 - 我故意给无 - 使用将接受或排除某些极端情况(在C私人或受保护的基类++),甚至是整个域(你考虑类型模板参数必须符合一个键入系统的约束条件?如果您的定义足够开放以适用于很多语言,那么您最终可能会回答yes,因此认为C++有两个输入系统和相互作用。现在考虑明确的专业化对第二个的影响。)通常会做出精确的定义,以便缓解他们提出的其余工作。