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-aBase
换句话说:每个派生的
对象都可以被视为基
,这使其有效:
Base* b = new Derived();
取消引用b
允许访问派生的
实例的基础
部分
这与此相反,因为Base
不是派生的
。以下内容无效:
Derived* d = new Base(); // NOT VALID
你已经回答了自己的问题,但我认为让你困惑的是指针
Derived *d=new Base();
派生类将拥有关于基类的所有信息。但是
基类对派生类一无所知
是的,所以您希望这样,因为这是声明为派生的derived*d
它应该知道有关base的所有信息。但重要的是实际创造了什么。在本例中,您创建了Basenewbase()
和派生的
可能会在基础
中添加更多内容,因此我们不能将基础用作派生的
但是在这种情况下
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:我被纠正了。删除评论是为了不混淆人们。