博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚方法virtual与抽象方法abstract的区别
阅读量:6815 次
发布时间:2019-06-26

本文共 992 字,大约阅读时间需要 3 分钟。

虚方法virtual的意思是子类可以重写,抽象方法abstract是子类必须重写。

抽象方法   

   使用abstract关键字    public    abstract    bool    Withdraw(…);   
   抽象方法是必须被派生类覆写的方法。   
   抽象方法是可以看成是没有实现体的虚方法   
   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法   
    
   虚方法   
   使用virtual关键字    public    virtual    bool    Withdraw(…);   
   调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。   
   虚方法可以有实现体

若一个实例方法的声明中含有        virtual        修饰符,则称该方法为虚拟方法;一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。         

            
       虚函数的限制:         
            
       1.虚函数仅适用于有继承关系的类对象,        所以只有类的成员函数才能说明为虚函数.             
       2.静态成员函数不能是虚函数.             
       3.内联函数不能是虚函数.             
       4构造函数不能是虚函数.             
       5.析构函数可以是虚函数.

简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.   

   如   

   
public
    
abstract
    
class
    AUser   
   {   
           
public
    
abstract
    UserInfo    getUser();   
           
public
    
virtual
    
void
    Save(UserInfo    info)   
           {   
                   
//
实现保存的功能   
           }   
   }   
    
   
public
    
class
    UserSqlServer:AUser   
   {   
           
public
    
override
    UserInfo    getUser()   
           {   
                     
//
一定要实现的,抽象类只给了抽象方法   
           }   
           
//
假设抽象类针对SqlServer实现的功能,这里不需要实现了.   
   }   
    
   
public
    
class
    UserOracle:AUser   
   {   
           
public
    
override
    UserInfo    getUser()   
           {   
                     
//
一定要实现的,抽象类只给了抽象方法   
           }   
           
//
假设抽象类针对Oracle实现的功能   
           
public
    
override
    
void
    Save(UserInfo    info)   
           {   
                     
//
覆盖抽象类中的Save方法   
           }   
   }   

 url:

转载地址:http://dbbzl.baihongyu.com/

你可能感兴趣的文章
BZOJ 3143 游走(高斯消元)
查看>>
SpringBoot 配置文件存放位置及读取顺序
查看>>
min.js格式化工具
查看>>
《软件工程-理论、方法与实践》读书笔记一
查看>>
POJ Problem Radar Installation 【贪心】
查看>>
redis 持久化方式
查看>>
Vue2.0设置反向代理解决跨域问题
查看>>
伪类link,hover,active,visited,focus的区别
查看>>
WTL 实践笔记
查看>>
漫谈C++:良好的编程习惯与编程要点(转载)
查看>>
Jquery plugin ScrollUp使用和实现
查看>>
使用HTML5 FormData对象实现大文件分块上传(断点上传)功能
查看>>
在 xilinx SDK 使用 math.h
查看>>
项目中自定义返回任意数据或者消息
查看>>
IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
查看>>
How to run ASP file on VS 2010
查看>>
Manacher算法
查看>>
Linux 的cp命令
查看>>
JavaScript类型转换
查看>>
OnClientClick="return confirm('确定要删除吗?')"
查看>>