C++ 子类型和子类之间有什么区别?

C++ 子类型和子类之间有什么区别?,c++,C++,子类型和子类之间有什么区别,我如何判断一个类是否是另一个类的子类型/子类 在支持重用方面,子类型和子类之间存在着重要的差异。子类允许在类内重用代码——实例变量声明和方法定义。因此,它们在支持类内的代码重用方面非常有用。另一方面,子类型在支持外部重用方面很有用,从而产生一种多态形式。也就是说,一旦一个数据类型被确定为另一个数据类型的子类型,可以应用于超类型元素的任何函数或过程也可以应用于该子类型的元素 您应该阅读全文。来自: 在支持重用方面,子类型和子类之间存在着重要的差异。子类允许在类内重用代码

子类型和子类之间有什么区别,我如何判断一个类是否是另一个类的子类型/子类

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

您应该阅读全文。

来自:

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


您应该阅读全文。

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

在C++中,类是类型,而唯一的“子类型”是派生类。因此,如果你选择使用“子类型”和“子类”来与C++连接,它们可能是同一回事。根据您的学术背景,我想您可能会说私有继承不会创建子类型,在这种情况下,它们是不同的。就这点而言,在某些学术环境中,“子类型”的概念是不合法的(形式类型理论在OOP之前就存在了。在计算机科学之前,除非你把巴贝奇算在内)

在C++11中,您可以测试
AClass
是否是另一个
的派生类(可以选择排除它们是同一类的情况):

std::是::value&&!std::值是否相同

即使继承是私有的,此表达式也是真的。

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

在C++中,类是类型,而唯一的“子类型”是派生类。因此,如果你选择使用“子类型”和“子类”来与C++连接,它们可能是同一回事。根据您的学术背景,我想您可能会说私有继承不会创建子类型,在这种情况下,它们是不同的。就这点而言,在某些学术环境中,“子类型”的概念是不合法的(形式类型理论在OOP之前就存在了。在计算机科学之前,除非你把巴贝奇算在内)

在C++11中,您可以测试
AClass
是否是另一个
的派生类(可以选择排除它们是同一类的情况):

std::是::value&&!std::值是否相同

即使继承是私有的,这个表达式也是正确的。

类是程序员定义的新类型,所以我认为subclass==subtype

Steve Jessop写道:


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;
}
#包括
使用名称空间std;
班车
{
公众:
类引擎//引擎是子类
{
公众:
静态void Start()
{

cout类是程序员定义的新类型,所以我认为subclass==subtype

Steve Jessop写道:


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;
}
#包括
使用名称空间std;
班车
{
公众:
类引擎//引擎是子类
{
公众:
静态void Start()
{

CUT

这是理论概念,不是C++的。但是让我们看看它们如何应用到C++。

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

    <> >子类型是指在类型值期望的地方使用子类型的值的可能性。在C++中,可以考虑公共继承意味着子类型关系,或者可以更严格地限制,并认为仅作为虚拟函数重写确保尊重LSP的情况的子类型。考虑到私有继承或受保护继承没有(但仍然是子类化的一种情况)是合理的,无论您对虚拟函数重写施加或不施加任何约束


所以,像往常一样,使用的精确定义——我故意不给出定义——将接受或排除某些特殊情况(C++中的私有或受保护基类)甚至整个域(你是否考虑类型模板参数必须遵守一个打字系统的约束?如果你的定义足够开放,可以应用到很多语言中,你可能会回答“是”,因此认为C++有两个类型的系统,相互作用。现在考虑显式专门化对第二个的影响。为了便于处理他们提出的其余部分,通常需要精确定义。

这是理论概念,而不是C++。但是我们来看看它们如何应用到C++。

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

  • 子类型是指在类型值为ex的位置使用子类型值的可能性