首页 > 编程语言 >c++学习:封装、继承、多态

c++学习:封装、继承、多态

时间:2023-07-26 19:44:46浏览次数:38  
标签:封装 定义 继承 多态 c++ 函数

c++ 是面向对象的编程语言,相对于 c 具有封装、继承、多态的特点。

封装

定义: 封装就是将对象的属性和行为封装起来,形成一个有机的整体,其载体就是类。类通常对客户隐藏其实现细节,这就是封装的思想,

就比如我们使用一个库函数时,我们只需要知道它的作用就可以了,没必要去了解它的内部工作,

  • 采用封装的思想保证了类内部数据结构的完整性,使用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据,这也就避免了外部操作对内部数据的影响,提高了程序的可维护性和安全性。

继承

定义: 继承就是新类从已有类那里得到已有的特性。

  • 继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。
  • 在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。

多态

定义: 可以简单概括为“一个接口,多种方法”,即用的是同一个接口,但是效果各不相同,多态有两种形式的多态,一种是静态多态,一种是动态多态。

静态多态

含义: 是在编译期就把函数链接起来,此时即可确定调用哪个函数或模板,静态多态是由模板、函数重载和宏实现的。

优点:

  • 带来了泛型编程的概念,使得C++拥有泛型编程与STL这样的武器; 在编译期完成多态,提高运行期效率;
  • 具有很强的适配性和松耦合性,(耦合性指的是两个功能模块之间的依赖关系)

缺点:

  • 程序可读性降低,代码调试带来困难;
  • 无法实现模板的分离编译,当工程很大时,编译时间不可小觑 ;
  • 无法处理异质对象集合
1、函数重载

含义: c++ 允许定义名称相同的函数,条件是它们的参数列表(又称为特征标)不能相同。这种行为称为函数重载

  • c++ 允许定义返回值和参数都不相同,但名称相同的函数。
  • c++ 不允许定义名称和参数相同,但返回值不同的函数。否则,编译器会报错:
    image
2、模版

定义: 函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数

3、宏多态

含义: 在宏多态中,是通过定义变量,编译时直接把变量替换,实现宏多态,一种初级形式的静态多态。

ref:

C++ 三大特性 封装,继承,多态

标签:封装,定义,继承,多态,c++,函数
From: https://www.cnblogs.com/zjacky/p/17583248.html

相关文章

  • 小熊猫 C++ 的 Monokai 改进
    小熊猫目前自带的配色方案Monokai:发现很丑,根本不是想象中的Monokai!!!网上也没有相关的配置,于是自己花了一下午弄了个Monokai:下载地址解压后直接在配色里面导入即可。具体步骤:工具-选项-编辑器配色-导入配色-选中解压后的文件-确定。是不是好看多了?还支持自定义......
  • c++学习:程字辈(进程、线程、协程)
    程字辈(进程、线程、协程)介绍C++中的进程、线程、协程之间的联系及区别。(以linux下实现为例)进程概念:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来......
  • C/C++代码混淆器
    C/C++代码混淆器试图通过混淆C/C++源代码以达到保护知识产权的目的的做法其实就是自欺欺人,因为不论如何混淆代码,到了编译阶段代码终究是要被还原成它本来的样子,说到底,这只是一层窗户纸而已。我曾利用宏机制实现过一个C/C++代码混淆器,效果乍一看还真能给人一种眼前一亮的神奇,......
  • C#引用c++ DLL找不到入口点
    c++中的函数名称在编译后改变了,需要利用dumpbin.exe找到编译后的名字dumpbin.exe在VS安装目录参考路径:C:\ProgramFiles(x86)\MicrosoftVisualStudio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64打开cmd,移动到dumpbin.exe对应路径,然后输入命令dumpbin-e......
  • C++使用指针进行地址传递及错误示范
    正确示范:voidchange(int*a,int*b){ inttemp=*a; *a=*b; *b=temp;}错误示范:voidchange(int*a,int*b){ int*temp=a; a=b; b=temp;} ......
  • mybaties --- insert的底层封装代码
    //提交,当前的对象到数据库//.save()方法是IService接口提供的,而EmployeeService接口继承了IService接口employeeService.save(employee);/*defaultbooleansave(Tentity){returnSqlHelper.retBool(this.getBaseMapper().insert(entity));}这段代码是一个通用的保存方法......
  • 1.c++入门以及简单顺序结构
    1.c++入门以及简单顺序结构编程就是教计算机解决问题,编程语言就是和计算机沟通时用到的语言——严欣怡一、编写一个简单的C++程序#include<iostream>usingnamespacestd;intmain(){ cout<<"你好C++,我是严欣怡."; return0;}二、语法基础变量1.变量的概念变......
  • 1.c++入门以及简单顺序结构题目
    #1.c++入门以及简单顺序结构题目##1.计算(a+b)*c的值```c++inta,b,c;cin>>a>>b>>c;cout<<(a+b)*c;return0;```##2.带余除法```c++inta,b;cin>>a>>b;cout<<a/b<<""<<a%b;``````c++//c++中取余结果只与%前面的正负有关系cout<<......
  • 1.C++入门以及简单顺序结构
    1.C++入门以及简单顺序结构编程就教计算机解决问题,编程语言就是和计算机沟通时用到的语言——金思宸一、编写一个简单的c++程序#include<iostream>usingnamespacestd;intmain(){ cout<<"你好c++"; return0;}2、语法基础变量1.变量的概念变量本子是一个装东......
  • 【持续更新】C/C++ 踩坑记录(一)
    未定义行为之NULLdereference下面这段代码中is_valid()解引用了空指针str,我们的直觉是编译运行后将迎来SIGSEGV,然而事情并非所期望的那样。/**ub_null.c-未定义行为演示之NULLdereference*/#include<stdio.h>#include<string.h>intis_valid(constchar*......