深入浅出C++

 
 

www.btestingsky.com旗下大头针出品

  C语言是面向事物的处理过程的,面向解决办法处理流程的。但不太符合我们实际的生活。而面向对象也比较符合我们现实的生活状态。很多有名的话都可以体现面向对象的概念:牛顿说过:我成功是站在巨人的肩上。呵呵,老爸有钱,少奋斗一万年。等等。无不体现面向对象继承的概念。
  C++语言是从C语言衍生出来的,虽然不是完全面向对象,但它继承了面向对象语言的所有优点: 抽象、继承、封装、多态
  首先说说类:类是有数据和方法组成的。属性里面有三种数据的隐藏方式:public,protected,private。这三种隐藏方式,体现了类的封装。类是不能直接用的,必须通过类的实例化对类中的数据和方法进行访问。经常举这样一个例子,类好象是冰糕模具不可以食用,而冰糕就是对象是可以吃的。而对于数据的访问一般通过对象的方法对类的数据进行访问。
  在C++语言中首先我们要谈的是抽象,是把有用的信息提取出来抽象一个类,因为有了抽象,才有了后面的继承。当然有了继承进而有了多态(即继承+虚函数=多态)的概念。什么是抽象呢?举个例子:大家都知道红富士苹果吧,那是相当好吃。红富士属于苹果类,苹果类是各种苹果一种抽象。那苹果类又属于水果类。水果类也是苹果类的抽象。
其实这个里面也体现了继承的概念,那在我们编写程序的时候,首先是写一个水果类的基类,然后苹果类继承水果类,红富士类继承水果类。这就是继承。
有了继承,就出现了多态的概念。
举一个例子:人--》灵长类动物--》动物
人的基类是灵长类动物,灵长类动物的基类是动物。但无论是人还是灵长类动物还是动物都有消化这个功能。大家都知道一个函数包括   返回值   函数名(参数)
消化写成函数可以是:排泄物  消化(食物); 
假设我们写这样一个类:
class 哺乳动物
{
 private:
     身高;
     体重;
 public:
 virtual 排泄物  消化(食物); 
};
class 灵长类动物 : class 哺乳动物
{
private:
     身高;
     体重;
public:
     排泄物  消化(食物); 
}
class 人 : class 灵长类动物
{
private:
     身高;
     体重;
public:
     排泄物  消化(食物); 
}
这三个类就写完了,每一个类都有一个同名函数 排泄物  消化(食物); 
但对于不同的类实例化成对象以后,如何实例化呢?(比如说人  男人灵长类动物猴子哺乳动物牛)对于不同的对象,比如说男人有男人的消化方式,猴子有猴子的消化方式,牛有牛的方式。比如牛是用四个胃来消化食物的。
当我们调用 排泄物  消化(食物); 这个函数的时候,函数可以根据不同的对象及通过父类中对象指向子类对象的引用及指针,调用不同的 消化函数。这个就实现了运行时的多态。但必须在基类的同名函数加一个Virtual使其变成基函数才可以实现。
多态也可以这样理解:同名函数,对与不同的对象,显示出它不同的状态。
上面的例子主要为了说明运行时多态。必须要重写函数体。
下面是对编译时多态的理解:
当然多态还有编译时多态。哪个主要通过函数重载来实现。函数重载是指:函数名相同,但传入参数不同的一组函数。比如说 素食行的动物和肉食性动物他们消化的东西是不一样的。
排泄物  消化(植物)
排泄物  消化(动物)
排泄物  消化(植物,动物); 
当我们生成对象是牛的时候,我们调用 排泄物  消化(植物)   ,当我们生成的对象是老虎时,我们调用 排泄物  消化(动物),当我们生成的对象是人的时候,我们调用 排泄物  消化(植物,动物);
万事万物皆对象,今天你对象了没有?今天你继承了没有?今天你多态了没有?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值