• 类和对象【上】


    目录

    面向过程和面向对象

    C语言

    C++

    类的定义

    类的两种定义方式

    成员变量命名规则

    类的访问限定符和封装

    面试题

    封装

    类的作用域

    类的实例化

    类对象模型

     内存分配

    内存对齐

    this指针

    特性

    面试题

    this指针存储在哪里?

    this指针可以为空么?

    结论:


    面向过程和面向对象

    C语言

    C语言是面向过程,关注的主要是过程,分析求解问题的步骤,通过函数调用逐步解决问题

    C++

    C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成

    类的定义

    在C语言中结构体只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数,在C++中,更喜欢用class来代替

    类的两种定义方式

    一种是是声明和定义全放在类里面

    如果成员函数定义在类中,编译器会将其当作内联函数处理

    另一种是类的声明放在.h文件这种,类的定义放在.c文件中(需要注意,成员函数名前需要加类名::)

    .h文件

    .c文件

    成员变量命名规则

    为了区分成员函数中的变量是成员变量还是成员函数,我们通常在成员函数前加上 _

    类的访问限定符和封装

     c++实现封装的方式,用类将对象的属性与方法结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用

    说明:

    public修饰的成员可以在类外面使用

    protected和private修饰的成员不能在内外直接使用

    访问权限作用域是从一个操作符开始开始到下一个操作符,如果没有到 } 结束

    class默认权限为private,struct的默认权限是public

    面试题

    c++中class和struct的区别是什么?

    C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来

    定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类

    默认访问权限是private

    封装

    面向对象的三大特性:封装,继承和多态

    封装:将数据和操作数据的方法进行有机结合,隐藏数据的属性和实现细节,仅对外公开接口和对象进行交互,c++通过类来实现

    封装本质是一种管理,类比于电脑主机来说,厂家出厂时在外部套上壳子,将内部隐藏起来,仅提供开关机和接口等让用户与计算机进行交互

    类的作用域

    类定义了一个新的作用域,类的所有成员都在类的作用域中,在类外定义成员时需要使用 :: 作用域操作符指定成员属于哪个作用域

    类的实例化

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

    类是对对象进行描述的,并没有直接分配实际的内存空间

    类实例化出来的对象占用实际的物理空间,存储类成员变量

    类比于建造房子,类就相当于图纸,实例化出来的对象相当于房子

    类对象模型

    一个类中既可以存储成员变量,也可以存储成员函数

     内存分配

    类中的成员函数放在公共代码区,不计入内存的计算

    结论:一个类的大小实际是该类中的成员变量之和,注意内存对齐

    空类的大小是一个字节

    内存对齐

    this指针

    在d1,d2分别调用init函数时,为了区分不同对象,c++给每个非静态的成员变量都增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作都是通过该指针去访问用户不需要传递,编译器自己完成

    特性

    1.this指针的类型是 * const,在成员函数中不能给this赋值

    2.this指针只能在函数内部使用

    3.this指针本质是成员函数的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象中不存储this指针

    4.this指针是成员函数第一个隐含的形参,一般由编译器通过ecx寄存器自动传递,不需要用户传递 

    面试题

    this指针存储在哪里?

    编译器在获取到对象地址后保存在this指针,存放在寄存器ecx中,不同编译器存储位置不同

    this指针可以为空么?

    this指针可以为空,当我们调用的函数不需要调用对象中的变量时可以为空

    1.this为空,没有调用对象中的变量,程序正常运行

    2.this为空,调用对象中的变量,程序崩溃

    结论:

    C++中通过类可以将数据 以及 操作数据的方法进行完美结合,通过访问权限可以控制那些方法在
    类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。
  • 相关阅读:
    八股总结(六):Android基础:四大组件与UI控件
    React类组件和函数组件对比-Hooks的介绍及初体验
    电脑更换硬盘的时候怎么迁移系统?
    PCL点云处理之Failed to find match for field ‘intensity‘问题的解决方法 (二百一十四)
    数据类型的定义
    JDK1.7和JDK1.8中HashMap线程不安全的原因详解
    STM32内部flash闪存的总结
    【AI视野·今日CV 计算机视觉论文速览 第255期】Wed, 27 Sep 2023
    洛谷 P4720 【模板】扩展卢卡斯定理/exLucas
    DCA培训心得笔记(三)
  • 原文地址:https://blog.csdn.net/m0_61381297/article/details/134014882