C/C :面向对象的三大特性 —— 封装、继承、多态

一、面向对象的三大特性

1、封装

        通过封装将一部分成员隐藏起来,另一部分成员作为类或对象与外部的接口。从而控制数据的访问权限,并且能够减少程序中不同部分之间的相互影响。隐藏对象的属性和接口实现细节,仅仅对外提供接口和方法。

        优点:提高安全性隔离影响。

2、继承

        在父类基础上创建派生类,可以通过增加、修改、替换父类成员产生派生类,对父类进行扩充,这种继承性使程序具有可重用性。子类可以从父类中获得同类的本质特征,并且增加个体特征,而不必完全重新定义。

        优点:提高代码重用性

3、多态

        多态体现在两个方面,动态联编和静态联编,分别指 在程序运行时的多态 和 在程序编译时的多态。

        动态联编:在子类中 重写 基类的虚函数,使用 基类指针 或者 基类引用 指向子类对象时,可以实现不同的功能。

        静态联编:使用 普通的函数重载 或者 函数模板的使用,实现调用同名函数实现不同功能。

        优点:提高代码重用性,提高可扩展性

 

二、多态特性

1、联编

        联编就是把函数名与函数体的程序代码连接(联系)在一起的过程。

        静态联编就是在编译阶段完成的联编。静态联编函数调用速度很快。效率高, 但缺乏灵活性;    

        动态联编是运行阶段完成的联编。动态联编在运行时才能确定调用哪个函数,它降低了程序的运行效率,但增强了程序的灵活性。

2、多态

        编译时多态是通过静态联编来实现的。编译时多态性主要是通过函数重载运算符重载实现的。

        运行时多态是通过动态联编实现的。运行时多态性主要是通过虚函数来实现的。

(一)运算符重载

        将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。 编译系统对重载运算符的选择,遵循函数重载的选择原则。

1、普通成员函数(实际运算对象 是 私有成员))第一个运算对象不传入

(1)复数相加  a + b

complex operator+(complex b) {

    int r = this->real + b.real;
    int v = this->imag + b.imag;

    return complex(real, imag);
}

(2)单目运算符(一种复数取非) !a

complex operator!() {

    this->real = !(this->real);
    this->imag = !(this->imag);

    return complex(this->real, this->imag);
}

(3)前置 ++a

complex operator++() {

    this->real += 1;
    this->imag += 1;

    return complex(this->real, this->imag);
}

(4)后置 a++,多一个int代表后置,但是不写形参

complex operator++(int) {

    this->real += 1;
    this->imag += 1;

    return complex(this->real - 1, this->imag - 1);
}

 

2、友元函数(实际运算对象 是 私有成员)

(1)复数相加 a + b

complex operator+(complex a, complex b) {

    int r = a.real + b.real;
    int v = a.imag + b.imag;

    return complex(real, imag);
}

(2)单目运算符(一种复数取非) !a

complex operator!(complex a) {

    a.real = !a.real;
    a.imag = !a.imag;

    return complex(a.real, a.imag);
}

(二)函数重载

(三)虚函数

 

 

 

参考链接:

https://blog.csdn.net/bitlxlx/article/details/77743467

https://www.cnblogs.com/jiangzhaowei/p/9129092.html

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值