C++学习第五天—多态概述:静态联编、返回值优化问题

多态概述

同一个事物表现出多种形态——一词多义
—>
发出同样的消息被不同类型的对象接收时导致完全不同的行为
—>
一个名字 不同的函数
静态多态
编译的过程中确定了同名操作的具体操作对象<函数重载 运算符重载实现>
动态多态
在程序运行过程中动态地确定操作所指定的具体对象<虚函数实现>
联编:指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为静态联编和动态联编

vs中程序运行:编译->联编->运行

静态联编 :

联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数的选择是基于指向对象的指针或者引用的类型。其优点是效率高,但灵活性差。
(通过以下示例理解)
Code1(理解静态联编):

#include"iostream.h"
class A 
{
   public: 
 void f(){
   cout<<"A"<<"";}
}; 
class B:public A
{
   public: 
 void f(){
   cout<<"B"<<endl;}
}; 
Void main()
{
   A *pa=NULL;
 A a;
 B b;
 pa=&a;pa->f();
 pa=&b;pa->f();
}
结果:A   A
可以看出 通过对象指针进行普通成员函数的调用 仅仅与指针的类型有关
而与此刻正指向什么对象无关。
要想实现当指针指向不同对象时执行不同的操作 就必须将基类中相应的成员函数定义为虚函数
从而实现动态联编

Code2(理解静态联编):
在这里插入图片描述
在这里插入图片描述
编译时已经确定了同名操作(Area函数)的具体操作对象 对Area函数的选择时基于指向对象的指针或引用的类型

Code3(函数重载):

#include<math.h>
class CMyclass
{
    public:
    int plus(int, int);
    double plus(double,double);
}
int CMyclass::plus(int x,int y)
{
   }
double CMyclass::plus(double x,double y)
{
   }
void main()
{
   
CMyclass Data;
cout<<Data.plus(1,2)<<endl;
cout<<Data.plus(3.3,3.0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值