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

目录
  • 面向过程和面向对象
  • 类的引入
  • 访问限定符
  • 封装
  • 类的作用域
  • 类的实例化

面向过程和面向对象

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

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

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

类的引入

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

最开始的老大哥在引入类的概念时是利用结构体引入的,C++ 兼容 C 的用法但同时也对C的结构体进行了升级,升级成了类,其重要标志就是结构体名称可以做类型其次结构体里面可以定义函数

访问限定符

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++类与对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++深入讲解类与对象之OOP面向对象编程与封装

    目录 1.面向对象编程 2.面向过程性编程和面向对象编程 3.类的引入 4.类的定义 4.1类的两种定义方式 4.1.1声明和定义全部放在类体中 4.2.2.声明和定义不放在类体中 5.类的访问限定符及封装 5.1 访问限定符 5.2封装 6.类的作用域 7.类的实例化 8.类对象模型 如何计算类对象的大小 面向过程编程也叫结构化编程.虽然结构化编程的理念提高了程序的清晰度,可靠性,并且方便维护.但它再编写大型的程序时,仍然面临这巨大的挑战,OOP(面向对象编程)提供了一种新的方法.与强调算法的

  • C++类和对象深入探索之分文件编写点和圆的关系详解

    目录 创建圆心类 创建圆类 判断点圆关系函数 最终实现 总结 上一篇封装直达 创建圆心类 point.h #pragma once #include<iostream> using namespace std; //创建圆心类 class Point { public: void setM_x(int x); int getM_x(); void setM_y(int y); int getM_y(); private: int m_x; int m_y; }; 把圆心的横纵坐标设为私有,公共

  • C++初阶教程之类和对象

    目录 类和对象<上> 1. 类的定义 2. 类的封装 2.1 访问限定修饰符 2.2 类的封装 3. 类的使用 3.1 类的作用域 3.2 类的实例化 4. 类对象的存储 5. this 指针 5.1 this 指针的定义 5.2 this 指针的特性 类和对象<中> 1. 构造函数 1.2 构造函数的定义 2.2 构造函数的特性 2. 析构函数 2.1 析构函数的定义 3. 拷贝构函数 3.1 拷贝构造函数的定义 3.2 拷贝构造函数的特性 4. 运算符重载 4.1 运算符重载的

  • C++面向对象之类和对象那些你不知道的细节原理详解

    目录 一.类和对象.this指针 二.掌握构造函数和析构函数 三.掌握对象的深拷贝和浅拷贝 四.类和对象应用实践 五.掌握构造函数的初始化列表 六.掌握类的各种成员方法及其区别 总结 一.类和对象.this指针 OOP语言的四大特征是什么? 抽象 封装.隐藏 继承 多态 类体内实现的方法会自动处理为inline函数. 类对象的内存大小之和成员变量有关 类在内存上需要对齐,是为了减轻cup在内存上的io次数 查看类对象的大小的指令:cl className.cpp /d1reportSingleC

  • C++深入探索类和对象之封装及class与struct的区别

    目录 封装的意义 访问权限 class和struct的区别 成员属性私有 案例练习 封装的意义 封装是C++三大面向对象之一 意义: 1.设计类的时候,属性和行为写在一起,表现事物 2.类在设计时,可以把属性和行为放在不同的权限下,加以控制 语法:class 类名 {访问权限:属性 / 行为}: 示例1:设计一个直角三角形,并求解他的面积 #include<iostream> using namespace std; //class代表设计一个类,后面跟着的是类名 class taiAngle

  • C++学习笔记之类与对象详解

    目录 前言: 1.访问限定符: [问题]C++中 struct和class的区别是什么? 2.封装 [问题]在类和对象的阶段,我们只研究类的封装特性,那什么是封装呢? 3.类的定义与声明 [问题]函数调用的问题 4.类的作用域 5.类的实例化 6.类的分类 总结 前言: 1.C 语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数逐步调用解决问题. 2.C++是基于面向对象的,关注的是对象,蒋一件事情拆分成不同的对象,靠对象之间的交互完成. 举个例子:外卖系统 面向过程是下单.接单.送餐的

  • C++中的类与对象深度解析

    目录 初始化列表 引论 初始化列表 explicit关键字 引论 explicit关键字使用 static成员 友元 引论 友元 内部类 基础概念 内部类的使用 补充 析构顺序例题 总结 初始化列表 引论 //初始化列表的引出 class B { public: B() { cout << "我是B的构造函数" << endl; } private: int _b; }; class A { public: A() { cout << "我

  • C++深入探究类与对象之对象模型与this指针使用方法

    目录 C++对象模型和this指针 1 成员变量和成员函数分开存储 2 this指针概念 3 空指针访问成员函数 4 const修饰成员函数 C++面向对象的三大特性为:封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和行为 例如: ​ 人可以作为对象,属性有姓名.年龄.身高.体重…,行为有走.跑.跳.吃饭.唱歌… ​ 车也可以作为对象,属性有轮胎.方向盘.车灯…,行为有载人.放音乐.放空调… ​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类 C++对象模型和th

  • C++深入探究类与对象之友元与运算符重载

    目录 友元 1 全局函数做友元 2 类做友元 3 成员函数做友元 运算符重载 1 加号运算符重载 2 左移运算符重载 3 递增运算符重载 4 赋值运算符重载 5 关系运算符重载 6 函数调用运算符重载 友元 生活中你的家有客厅(Public),有你的卧室(Private),客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的好闺蜜好基友进去. 在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术. 友元的目的就是让一个函数

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

    目录 面向过程和面向对象 类的引入 访问限定符 封装 类的作用域 类的实例化 面向过程和面向对象 类和对象是 C++ 的核心特性 我们之前的C语言就属于面向过程,关注过程,分析求解问题的步骤再通过函数调用解决问题:而现在C++是基于面向对象,关注对象,将一个问题拆分成不同对象,依靠对象之间的交互完成. 比如有一个图书馆系统,用C语言面向过程思路就是:统计图书,图书分类,同步上架图书数据,记录借阅信息.而面向对象我们会创建两个类,图书馆和用户,我们关心的是图书馆和用户之间的关系,再分别实现交互,这

  • Java 类与对象超基础讲解

    目录 什么是面向对象 面向过程与面向对象 类与对象的使用 类与对象的使用与说明 对象的初始化 this的使用 构造方法 this可以调用本类的构造方法 什么是面向对象 Java语言是一个纯面向对象的语言,面向对象的语言不仅只有Java,包括C++,PHP等 面向对象的编程思想简称 OOP(Object Oriented Programming),其基本特点就是封装,继承和多态. 面向过程与面向对象 想要弄清楚什么是面向对象,首先需要知道两者的区别 面向过程更注重程序的每一个步骤,用相应的函数来实

  • C++浅析类与对象基础点

    目录 认识类和对象 访问限定符 this指针 认识类和对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题. C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 举一个例子,如果我们要设计一个点餐平台,依照生活中的例子 那么C:商家上架商品,客户点餐,通知商家制作外卖,通知骑手配送,客户吃完点评.....(过程) 而C++:商家.客户.骑手(对象) 从这个地方就衍生出了”类”这个概念. 我们在学习C语言的时候有过创建结构体 s

  • C++类和对象基础详解

    目录 一.类和对象的基本概念 结构化程序设计 面向对象的程序设计 使用类的成员变量和成员函数 二.类和对象基础 类成员的可访问范围 构造函数(constructor) 基本概念 拷贝(复制)构造函数 类型转换构造函数 析构函数(destructors) 总结 一.类和对象的基本概念 结构化程序设计 C语言使用结构化程序设计: 程序 = 数据结构 + 算法 程序由全局变量以及众多相互调用的函数组成 .算法以函数的形式实现,用于对数据结构进行操作. 结构化程序设计的不足 1.结构化程序设计中,函数和

  • Java 基础语法让你弄懂类和对象

    目录 Java 基础语法 一.类与对象的初步认知 二.类和类的实例化 三.类的成员 1. 字段/属性/成员变量 2. 方法 3. static 关键字 四.封装 1. private 实现封装 2. getter 和 setter 方法 五.构造方法 1. 基本语法 2. this 关键字 六.认识代码块 1. 什么是代码块 2. 本地代码块 3. 实例代码块 4. 静态代码块 七.补充说明 1. toString 方法 2. 匿名对象 八.总结 Java 基础语法 其实在学习 C 语言时就一直

  • Python类和对象基础入门介绍

    目录 视频 Python 类和对象 创建和使用类 根据类创建实例 视频 观看视频 Python 类和对象 面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象. 编写类时,你定义一大类对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性.使用面向对象编程可模拟现实情景,其逼真程度达到了令你惊讶的地步. 根据类来创建对象被称为实例化,这是能够使用类的实例. 面向对象最重要的概念就是类(Class)和实例(Instance),

  • php基础知识:类与对象(5) static

    Declaring class members or methods as static makes them accessible without needing an instantiation of the class. A member declared as static can not be accessed with an instantiated class object (though a static method can).  声明静态的类变量和方法可以不需要实例化类对象的

  • python基础之定义类和对象详解

    定义简单的类 面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了! 定义只包含方法的类 在python中,要定义一个只包含方法的类,语法格式如下: #用class定义类名 class 类名: def 方法1(self,参数列表) #方法的属性中有且仅有一个self pass def 方法2(self,参数列表) #类之外定义的def是函数,在类里面定义的def叫做方法,而且括号里必须要有self pass class Student: pass

  • 关于JavaScript定义类和对象的几种方式

    可以看看这个例子: 复制代码 代码如下: var a = 'global'; (function () { alert(a); var a = 'local'; })(); 大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的. 其实很简单,看一看JavaScript运行机制就会明白.我们可以把这种现象看做"预声明".但是如果稍微深究一下,会明白得更透彻. 这里其实涉及到对象属性

  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    接口的灵活性就在于"规定一个类必须做什么,而不管你如何做". 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似. //定义接口InterA interface InterA { void fun(); } //实现接口InterA的类B class B implements InterA { public void fun() { System.out.pri

随机推荐