C++考题中提到纯虚拟函数是什么概念?起什么作用?

C++考题中提到纯虚拟函数是什么概念?起什么作用?,第1张

通过纯虚拟函数的方式,可以指明一个虚拟函数只是提供了一个可被子类型改写的接口。

  纯虚函数是在基类中声明的虚函数,它可以在基类中有定义,而且派生类必须定义自己的实现方法。基类不能生成对象,可以使用指针或者引用派生类对象。基类不在基类中实现纯虚函数的方法是在函数原型后加“=0”

  virtual void funtion1()=0

引入原因/纯虚函数的作用

为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。

在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。

 

 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()=

0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

问题一:什么是抽象类,为什么要写抽象类 哥哥你发错地方了=。=发到java去~

以下来自:

抽象类与接口紧密相关,它们不能实例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码。

在实现抽象类时,必须实现该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值。

抽象类不能被实例化,也就是不能用new关键字去产生对象

抽象方法只需声明,而不需实现

抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类

以下来自:zhidaobaidu/wtp=wk

理解抽象类

abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以 *** 作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

从语法定义层面看abstract class和interface

在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

使用abstract class的方式定义Demo抽象类的方式如下:

abstract class Demo {

abstract void method1();

abst>>

问题二:什么是抽象类?抽象类有什么作用? 抽象类指的是含有纯虚函数的类,该类不能建立对象,只能声明指针和引用,用定基础类的接口声明和运行时的多态

另外,如果抽象类的某个派生类在向继承体系的根回溯过程中,并不是所有的纯虚函数都实现了,该类也是抽象类,同样不能建立对象

问题三:什么是抽象类和抽象方法? 抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal 定义抽象类 abstract void eat(); 定义抽象方法}class Horse extends Animal 定义继承Animal的子类 void eat() 重写父类的抽象方法 }class Dog extends Animal void eat() }class test}运行结果: 马吃草料! 狗吃骨头!

问题四:抽象类是什么 JAVA的抽象类其实和她的普通类在表示实现概念的东西没多大区别,不要因她带有抽象这个形容词就觉得比她的普通类理解起来复杂

个人的理解是

所谓的抽象类呢,就是带有抽象方法的类

所谓的抽象方法就像是一种写代码的规范

抽象方法没有方法体

抽象方法可以有参数列表

抽象方法用abstract修饰

抽象方法的访问修饰分别为 public、protected、default(缺省 不用写)

加深了解抽象类

/理解JAVA抽象类

1抽象类不能被实例化

2抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子)

3抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法

4抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体

5如果抽象的某个子类是普通类(非abstract类型的类),那么该子类必须Override抽象类中所有的抽象方法

6抽象类的子类也是抽象类的话,那么该子类既可以Override父类中的方法,也可以不Override父类中的方法

7普通类中不能定义抽象方法

8static不能修饰抽象方法

备注:为了方便理解,所谓的普通是指如下形式定义的类

public class X{} 或 class A XX{}

/

问题五:什么叫做抽象概念 抽象是无法亲自看到的,需要充分利用思维。抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到共同的部分。

共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。所以抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了。

所谓的共同特征,是相对的,是指从某一个刻面看是共同的。比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。

问题六:什么叫抽象? 面向对象软件开发的一个基本方法就是抽象,到底什么是抽象呢 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到共同的部分。 共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。所以抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了。 所谓的共同特征,是相对的,是指从某一个刻面看是共同的。比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。 在软件开发过程中,识别稳定的需求、识别核心的需求、识别概念性的需求、设计系统的架构、定义系统中构件之间的接口关系等等都是抽象的过程,都是反应系统的本质特征的过程。 抽象的,才是稳定的,才是永恒的。 抽象的反义词是具体。人员往往会说:“你讲的太抽象了,能不能讲的具体一点”在开发语言中,有抽象类,有具体类,具体类可以继承自抽象类,可以实例化。抽象类可以派生出众多的不同的具体类。所谓:“一生二,二生三,三生万物”。系统的稳定体现在抽象类,系统的变化体现在具体类。抽象类的层次要高于具体类。 系统因抽象而稳定,因抽象而生动。

问题七:什么叫做抽象类,抽象类有何作用,抽象类的派生类是否一定要给出纯虚函数的实现? 抽象类是含有纯虚函数的类并没有实现纯虚函数函数体的类;

作用:抽象类顾名思义是一个抽象的概念,具体没有讲他怎么做;

他是在子类中实现的,这是一个具体化的过程,如果子类中没有全部实现纯虚构函数的函数体部分那其子类依旧是一个抽象类。

抽象类的派生类不一定要给出纯虚构函数的实现,给出所有纯虚函数的实现那该派生类就不再是抽象类,而没有给出其纯虚构函数的实现,那该纯虚函数依旧是抽象类。

望采纳!

问题八:java中什么叫抽象方法和抽象类及他们的特点,说的具体些,写个例子 7何为抽象方法和抽象类?

马 克 -to -win:方法前有个abstract修饰符,就叫抽象方法。类前有个abstract修饰符就是抽象类,完了,简单就好记。

以下是二者的要点:马 克 -to -w in :

1)抽象方法没有函数体。有童鞋说,这有什么意义呢?比如下面的例子,当我们不知道现在是什么车时,你让我写驾驶(steer)这个方法,我怎么写呢?这种场合就需要抽象方法。

2)抽象类(Veh)的子类(Lim)只要不是抽象类,马克-to-win:它自己(Lim)或它的父类(Car)必须把那个抽象类里的抽象方法全部实现掉。这句话很复杂,对照下面的例子来理解。

3)抽象类不能被实例化。字面上好理解,抽象的东西那么抽象,看不见摸不着,当然不能被实际的具体的生成了。还是举上面的例子。当我们现在连什么车都不知道时,也不知道它是自行车还是豪华轿车时,你让我具体地生成这辆车,当然是不可能了。。。。。。。。。。。详情网上找“马克-to-win”,参考他的网站或他的百度空间:java第三章的内容,如果实在找不到,按我下面说的地址找:

网站名是:mark-to-win

再附加上下边的路径地址: /JavaBeginner/JavaBeginner3_web#AbstractMethodClass

虚基类是相对于它的派生类而言的,它本身可以是一个普通的类。

只有它的派生类虚继承它的时候,它才称作虚基类,如果没有虚继承的话,就称为基类。比如类B虚继承于类A,那类A就称作类B的虚基类,如果没有虚继承,那类B就只是类A的基类。

虚继承主要用于一个类继承多个类的情况,避免重复继承同一个类两次或多次。

例如 由类A派生类B和类C,类D又同时继承类B和类C,这时候类D就要用虚继承的方式避免重复继承类A两次。

而抽象类是指带有有一个或一个以上的纯虚函数的类。抽象类一般值用于继承,不能定义类对象,但可以定义类指针和引用。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存