服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++浅析类与对象的基础

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

2022-12-09 13:14乔乔家的龙龙 C/C++

类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域

面向过程和面向对象

类和对象是 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++ 首先会把数据和方法封装到一起,便于我们更好的控制,想自由访问的设计成公有,不想直接拿出来访问的设计成私有,像这样:

?
1
2
3
4
5
6
7
8
9
10
11
12
class Stack
{
 public:
    void Push()
    {}
    void Pop()
    {}
private:
    int* data;
    int size;
    int capacity;
}

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

类的作用域

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

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

类的实例化

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

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

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

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

原文链接:https://blog.csdn.net/qq_61500888/article/details/124730603

延伸 · 阅读

精彩推荐
  • C/C++C++执行Linux Bash命令的方法

    C++执行Linux Bash命令的方法

    今天小编就为大家分享一篇C++执行Linux Bash命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    nudt_qxx10802021-07-31
  • C/C++C语言计算大数相加的方法

    C语言计算大数相加的方法

    这篇文章主要为大家详细介绍了C语言计算大数相加的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    l45570270712292021-11-04
  • C/C++socket多人聊天程序C语言版(二)

    socket多人聊天程序C语言版(二)

    这篇文章主要为大家详细介绍了socket多人聊天程序C语言版第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    _acme_7362021-04-18
  • C/C++Cocos2d-x 3.x入门教程(二):Node节点类

    Cocos2d-x 3.x入门教程(二):Node节点类

    这篇文章主要介绍了Cocos2d-x 3.x入门教程(二):Node节点类,本文对Node节点类做了一个简明讲解及Node类提供的函数做了说明,需要的朋友可以参考下...

    果冻想8332021-02-20
  • C/C++C语言中system()执行cmd命令打开关闭程序的方法

    C语言中system()执行cmd命令打开关闭程序的方法

    今天小编就为大家分享一篇C语言中system()执行cmd命令打开关闭程序的方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yuanjie924682021-06-25
  • C/C++c++ STL常用遍历算法

    c++ STL常用遍历算法

    这篇文章主要介绍了c++ STL常用遍历算法的实现,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下...

    西西嘛呦10092021-10-14
  • C/C++C++ 系统IO流介绍

    C++ 系统IO流介绍

    这篇文章主要介绍了C++系统IO流,大部分人都是从输出"Hello World"开始的,本文会介绍C++中的IO细节,需要的朋友可以参考一下,希望对大家有所帮助...

    一个热爱学习的深度渣渣5022022-03-10
  • C/C++详解C语言gets()函数与它的替代者fgets()函数

    详解C语言gets()函数与它的替代者fgets()函数

    这篇文章主要介绍了详解C语言gets()函数与它的替代者fgets()函数的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    青儿哥哥5322021-04-18