Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基类派生关系_C++_Inheritance - Fatal编程技术网

C++ 基类派生关系

C++ 基类派生关系,c++,inheritance,C++,Inheritance,我对基派生类关系有这种怀疑 我知道当我们从基类派生一个类时,派生类将拥有关于基类的所有信息。但是基类对派生类一无所知 那么,为什么这是可以接受的呢 Base *b=new Derived(); 而不是 Derived *d=new Base();. 基本上我需要理解第一句话的必要性?我的意思是,将派生类对象指定给基类指针有什么用 注意:这不是作业。我正处于学习编程的早期阶段。所以基本上需要理解零碎的东西。如果这是一个非常基本且已经被问到的问题,请忽略。继承定义了一种“is-a”关系。如果De

我对基派生类关系有这种怀疑

我知道当我们从基类派生一个类时,派生类将拥有关于基类的所有信息。但是基类对派生类一无所知

那么,为什么这是可以接受的呢

Base *b=new Derived();
而不是

Derived *d=new Base();.
基本上我需要理解第一句话的必要性?我的意思是,将派生类对象指定给基类指针有什么用

注意:这不是作业。我正处于学习编程的早期阶段。所以基本上需要理解零碎的东西。如果这是一个非常基本且已经被问到的问题,请忽略。

继承定义了一种“is-a”关系。如果
Derived
Base
作为基类,则
Derived
is-a
Base

换句话说:每个
派生的
对象都可以被视为
,这使其有效:

Base* b = new Derived();
取消引用
b
允许访问
派生的
实例的
基础
部分

这与此相反,因为
Base
不是
派生的
。以下内容无效:

Derived* d = new Base(); // NOT VALID

你已经回答了自己的问题,但我认为让你困惑的是指针

Derived *d=new Base();
派生类将拥有关于基类的所有信息。但是 基类对派生类一无所知

是的,所以您希望这样,因为这是声明为派生的
derived*d
它应该知道有关base的所有信息。但重要的是实际创造了什么。在本例中,您创建了Base
newbase()
派生的
可能会在
基础
中添加更多内容,因此我们不能将基础用作派生的

但是在这种情况下

Base *b=new Derived();
创建一个新的派生。但我们只对它从基地继承了什么感兴趣。没关系

因为他知道什么是在基地


派生的
类对象包含
类对象。这允许它调用其
Base
函数。而
基本
类对象不包含
派生的
类对象

Base *b=new Derived(); 

在可以使用单个函数处理所有派生类对象的情况下非常有用

考虑一下

父类:动物 派生类:狗、猫等

现在,你有了一个函数

void dosomethingtheanimal(//在这里取动物)

如果不允许将基类对象分配给父引用变量。您必须为
Dog
Cat
等创建单独的函数

void doSomethingtoTheAnimal(Cat *b) or void doSomethingtoTheAnimal(Dog *b)
然而,对于多态性,您可以使用void dosomethingtheanimal(Base*b)然后你就可以做了

Base*b1=新狗()
Base*b2=新猫()

并使用相同的函数
dosomethingtheanimal(b1)
dosomethingtheanimal(b2)


此外,当指向派生类对象时,基类指针只能调用父类中的函数或子类中的重写函数。它不知道在子类中专门定义的函数。关键字:多态性。因为
派生的
是一个
基的
,但不是相反的方式。@chris&Oli Charlesworth:我被纠正了。删除评论是为了不混淆人们。