C++浅析类与对象的基础

 更新时间:2022年05月26日 09:00:32   作者:乔乔家的龙龙  
类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域

面向过程和面向对象

类和对象是 C++ 的核心特性

我们之前的C语言就属于面向过程,关注过程,分析求解问题的步骤再通过函数调用解决问题;而现在C++是基于面向对象,关注对象,将一个问题拆分成不同对象,依靠对象之间的交互完成。

比如有一个图书馆系统,用C语言面向过程思路就是:统计图书,图书分类,同步上架图书数据,记录借阅信息。而面向对象我们会创建两个类,图书馆和用户,我们关心的是图书馆和用户之间的关系,再分别实现交互,这里简单提一下你可能不是很好理解,但是没有关系,我们后序会慢慢学习的。

类的引入

类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法,类中的数据和方法称为类的成员。定义一个类,本质上是定义一个数据类型的蓝图

最开始的老大哥在引入类的概念时是利用结构体引入的,C++ 兼容 C 的用法但同时也对C的结构体进行了升级,升级成了类,其重要标志就是结构体名称可以做类型其次结构体里面可以定义函数,,相比升级后的 struct 我们更喜欢使用 class ,class 下它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作,struct 和 class 都可以用来定义类。

访问限定符

C++引出一个概念叫封装,那他就提出一个东西叫访问限定符,访问限定符是指类里面的东西我不一定都想拿给你用,能给你用的我会用 public 关键字声明,数据就可以直接被访问,当没有 public 声明时,class 默认数据为私有(protected 和 private)类型,而 struct 不加限定符默认为公有(public)的因为他要兼容 C。

privata 私有域限制的是从域外面进行访问,锁只对外人,里面的类是可以访问到 private 的。

现阶段我们认为 protected 和 private 是一样的,他们的不同会在学习继承时体现出来。

class Student
{
public:
  …………
}

我们也可以加多个访问限定符,因为 C++ 会默认你的类型从第一个访问限定符开始到下一个结束,这个之间的区域就是对应的访问类型。如果后面没有访问限定符作用域就会在遇到 } 后结束,注意访问限定符只在编译的时候有用,在数据映射到内存后,就没有任何访问限定符上的区别了。

封装

封装,继承,多态并称面向对象的三大特性。

要讲封装就要和 C语言 做对比,比如我们C语言定义了一个栈 stack,我要对这个栈进行入栈出栈的操作,我就要在外面自己搞一个 StackPush 和 StackPop 函数,很直观的看出我们数据和方法是分离开来的,而分离开来的最大问题就是松散自由,我没有办法对他进行集中的管理。

为什么这么说,因为我一旦想进行打印这种类似的操作,除了直接调用寻找栈顶元素的函数,就是直接使用成员访问操作符写成(stack.a[stack.top-1]),别人在使用时就可能会误用,不知道是栈顶元素还是栈顶元素下一个。

封装的意义就是更好的管理,还是那句话,young man,太自由你把握不住。说难听点,C语言这种松散自由的局面只适合高素质程序员,我们不能要求每个人都有高素质去切合代码,而C++的约束才是更贴近大多数人的方式

而 C++ 首先会把数据和方法封装到一起,便于我们更好的控制,想自由访问的设计成公有,不想直接拿出来访问的设计成私有,像这样:

class Stack
{
 public:
    void Push() 
    {}
    void Pop()
    {}
private:
    int* data;
    int size;
    int capacity;
}

所以一般情况下我们设计类,成员数据或者没必要调用的函数都是私有或者保护,想给访问的蔡设计成公有,所以 C++ 封装就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,相比C语言更加严谨。

类的作用域

类里面用来定义的空间就是类的作用域,他和命名空间类似,都有域。

注意成员函数如果在类里面定义,编译器可能会默认把他当成 inline 内联函数处理,这就暗示了实际中短小函数可以直接在类里面定义,长一点的函数定义和声明要分开。我们类里面什么都没有的就是空类,大小为 0;而当类对象没有成员变量时不能说是空类,编译会给他们分配 1 byte 表示对象存在过。

类的实例化

用类创建对象的过程,就称为类的实例化。

类不能存数据,类定义出的对象才能用来存数据,所以我说类就像一张图纸,有了房子才能住人。那么问题来了,房子修好了我怎么算大小呢,成员变量和函数参差不齐的,这里就要知道他是怎么考虑的,其实他计算大小时值算了成员变量,不考虑成员函数!。

其实很简单,因为外面调的每个同名函数是同一个函数,我没必要再去每个对象里面去存个他的指针,那就纯纯的浪费了,函数名实际上是存放在了内存的公共代码区。但是成员变量就要各存一份了,因为不同对象里面他们的值不一定是相同的,他们相对独立。

到此这篇关于C++浅析类与对象的基础的文章就介绍到这了,更多相关C++类与对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C语言中const关键字的用法

    详解C语言中const关键字的用法

    这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 剑指offer之判断链表是否包含环

    剑指offer之判断链表是否包含环

    今天小编就为大家分享一篇关于剑指offer之判断链表是否包含环,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

    C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

    这篇文章主要介绍了C/C++ 中如何使用SetConsoleTextAttribute()函数来控制输出字符的颜色,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • C++11/14 线程的创建与分离的实现

    C++11/14 线程的创建与分离的实现

    这篇文章主要介绍了C++11/14 线程的创建与分离的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 快速模式匹配算法(KMP)的深入理解

    快速模式匹配算法(KMP)的深入理解

    本篇文章是对快速模式匹配算法(KMP)进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++中如何修改const变量你知道吗

    C++中如何修改const变量你知道吗

    这篇文章主要为大家详细介绍了C++修改const变量,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言简易实现扫雷小游戏

    C语言简易实现扫雷小游戏

    这篇文章主要为大家详细介绍了C语言简易实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C/C++中接收return返回来的数组元素方法示例

    C/C++中接收return返回来的数组元素方法示例

    return是C++预定义的语句,它提供了种植函数执行的一种放大,最近学习中遇到了相关return的内容,觉着有必要总结一下,这篇文章主要给大家介绍了关于C/C++中如何接收return返回来的数组元素的相关资料,需要的朋友可以参考下。
    2017-12-12
  • 详解C++模板编程中typename用法

    详解C++模板编程中typename用法

    typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数,下面通过例子给大家介绍c++模板typename的具体用法,一起看看吧
    2021-07-07
  • C语言开发简易版扫雷小游戏

    C语言开发简易版扫雷小游戏

    本文给大家分享的是一个使用C语言开发的命令行下的简易版扫雷小游戏,本身没有什么太多的技术含量,只不过是笔者的处女作,所以还是推荐给大家,希望对大家学习C能够有所帮助。
    2015-12-12

最新评论