日志18

C++面向对象程序设计

一、面向对象程序设计的基本概念

  1. 面向对象程序设计(OOP):是一种程序设计范型,它使用对象来设计软件系统。对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。OOP的基本特征包括抽象、封装、继承和多态。
  2. :是具有相同的数据和相同的操作的一组对象的集合,可以看作是一个蓝图,定义了对象的模板。
  3. 对象:是类的实例,即根据类创建的具体实体。
  4. 封装:是将数据和操作数据的方法组合在一起,并对数据的访问进行限制的机制。它使用访问控制符(如private、public、protected)来限制对类成员的访问。

二、C++中的面向对象特性

    1.抽象

    • 定义:抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。
    • 分类:抽象包括数据抽象和过程抽象。数据抽象描述某类对象的属性或状态,而过程抽象描述某类对象的共有的行为特征或具有的功能。
    • 作用:通过抽象,程序员可以专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。

    2.封装

    • 定义:封装是将数据和方法组合在一起,并对外部隐藏实现细节,只公开对外提供的接口。
    • 目的:封装可以提高安全性、可靠性和灵活性。通过封装,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外地改变或错误地使用对象的私有部分。
    • 实现:在C++中,可以使用访问控制符(如private、public、protected)来实现封装。私有成员只能被本类中的成员函数引用,类外不能调用;公有成员既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数引用。

    3.继承

    • 定义:继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。
    • 作用:继承可以提高代码的复用性和可扩展性。通过继承,可以在不重新编写原有类的情况下,对已有功能进行扩展或修改。
    • 实现:在C++中,可以使用继承关键字(如class或struct)来实现继承。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。
    • 类型:继承分为实现继承和接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称,但子类必须提供实现的能力。

    4.多态

    • 定义:多态是指同一种操作作用于不同的对象时,可以有不同的解释和实现。
    • 作用:多态可以提高代码的灵活性和可读性。通过多态,可以在不同的对象上实现相同的操作,但每个对象可以根据自己的特点来执行该操作。
    • 实现:在C++中,多态可以通过接口或继承来实现。常见的多态实现方式包括函数重载和虚函数。函数重载是指在同一个作用域内,可以声明多个具有相同名称但参数不同的函数;虚函数是指在基类中声明为virtual的函数,它允许在派生类中对其进行重写。
    • 类型:多态分为静态多态和动态多态。静态多态是通过函数重载和运算符重载实现的,复用函数名;动态多态是通过派生类和虚函数实现的,运行时多态。

    综上所述,C++中面向对象的基本特点包括抽象、封装、继承和多态。这些特点使得C++成为一种强大且灵活的编程语言,能够高效地解决复杂的编程问题。

三、C++面向对象程序设计的其他知识点

  1. const关键字const是一个关键字,用于表示常量。当一个变量被声明为const时,它的值在初始化之后就不能被修改。const成员变量只能在构造函数的参数初始化表中初始化。const成员函数不能修改类的任何成员变量(除非它们是mutable的)。
  2. 静态成员静态成员变量是类的所有对象共享的变量。它需要在类外进行定义和初始化。静态成员函数没有this指针,因此只能访问类的静态成员变量和其他静态成员函数。
  3. 友元函数友元函数是非成员函数,但可以被类的成员函数或对象调用,并访问类的私有成员和保护成员。友元函数在类中用friend关键字声明。
  4. 内联函数内联函数是一种在调用时用函数体替换调用语句的函数。它通常用于短小的函数,以减少函数调用的开销。在函数定义前加上inline关键字即可将函数声明为内联函数。但请注意,内联函数只是对编译器的建议,编译器可能会忽略这个建议。
  5. 对象赋值和复制在C++中,可以使用赋值运算符(=)将一个对象的值赋给另一个同类型的对象。这会导致右边对象的数据被拷贝到左边对象的数据中。复制构造函数是一种特殊的构造函数,它用于创建一个新对象作为另一个同类型对象的副本。
  6. 构造函数和析构函数构造函数在对象创建时自动调用,用于初始化对象。析构函数在对象销毁时自动调用,用于执行清理工作。
全部评论

相关推荐

03-07 17:32
已编辑
中南大学 C++
是只吗喽:淘天和米哈游之间只隔了15分钟,有点极限了xd
点赞 评论 收藏
分享
问的很简单都秒了,但是面试官没开摄像头,疑似kpi,无后续。一面(35min)(25/3/6)(无后续)    1、自我介绍    2、介绍一下你的那个Python相关项目(本科毕设,web系统+算法模型提供部分接口)    3、Java面向对象有哪些特点呢?详细说一下。    4、介绍一下hashmap;为什么要把链表转换为红黑树呢?红黑树查找的时间复杂度?1.7和1.8的区别。    5、介绍一下concurrentHashmap。    6、synchronized锁和Lock锁有什么区别?    7、公平锁的一个底层是怎么实现的呢?    8、线程池的核心参数、拒绝策略、提交一个任务执行流程?    9、spring有哪些特点?(ioc/aop)    10、spring中对于循环依赖是怎么解决的?    11、MySQL和redis的区别?    12、MySQL的索引结构是什么?    13、MySQL的事务有哪些特性?怎么保证?    14、MySQL的默认隔离级别?可重复读是怎么做到的呢?    15、介绍一下MVCC和快照读readview。    16、一般在什么场景下会使用redis?    17、对于大量的请求,如果此时缓存中还没有写入数据怎么办?    18、介绍一下redis实现的分布式锁。    19、有用过es和mongo DB吗?(知道,没用过)    20、消息中间件用过吗?说一下你的使用场景?    21、一个场景,如果说有一个接口响应的比较慢,如果说让你排查,你会怎么去排查?(上下游接口、大key问题,只答了两,后面试官补充)    无手撕,反问业务。
胖墩墩的查理在学c语言:哥们我是五号面的 流程差不多
查看21道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务