C++入门 02 _类和对象(上)

本文介绍了C++中的面向对象编程基础,包括面向对象的基本概念、类的引入、类的定义,以及类的访问限定符和封装。通过实例展示了如何在类中定义成员函数,并探讨了编译器对内联函数的处理。同时,讨论了类的作用域和实例化过程,以及公有和私有成员的访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类和对象(上)

[本节目标]

  1. 面向对象和面向对象初步认识
  2. 类的引入
  3. 类的定义
  4. 类的作用域
  5. 类的实例化
  6. 类的访问限定符及封装
  7. 类的对象大小的计算
  8. 类成员函数的this指针

1. 面向对象和面向对象初步认识

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

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

2. 类的引入

C语言中, 结构体中只能定义变量, 在C++中, 结构体内不仅可以定义变量, 也可以定义函数.

3. 类的定义

Class为定义类的关键字, ClassName类的名字(PersonInfo), {}中为类的主体, 注意类定义结束时后面是分号 .  和C语言相比,  结构类似, 关键字不同.

类中的元素称为类的成员:  类中的数据称为类的属性或者成员变量如上图(_name, _gender, _age),;类中的函数称为类的方法或者成员函数如上图(SetStudentInfo(). PrintStudentInfo() ).

类的两种定义方式:

  1. 声明和定义全部放在类体中
  2. 声明放在.h文件中, 类的定义放在.cpp文件中,更推荐使用这种方法

    需要注意: 成员函数如果在类中定义, 编译器可能会将其当成内联函数处理.

     图1 在类中定义了一个ShowInfo函数信息

    图2 对类进行了实例化, 创建了PI这个类的实例,  然后调用了ShowInfo函数

    图3 是进行反汇编代码, 可以看到在代码中 ShowInfo函数全部被展开, 该函数并没有到栈中调用(即没有出现call ShowInfo这行指令)

    由此可见ShowInfo函数被当成内联函数展开了.  其实所有在类中定义的函数都会被当成内联函数, 但具体展开与否是由编译器自己决定的, 相对复杂的函数可能就不会被展开(这样节省资源), 简单的函数就展开(这样提升效率) !

    4. 类的访问限定符及封装

    封装是什么?

    1. 将数据和操作数据的方法进行有机结合, 隐藏对象的属性和实现细节, 仅对外公开接口来和对象进行交互.

    2. 封装本质上是一种管理, 将类的数据和方法都封装到一起, 使用protected/private把成员封装到一起, 开放一些共有的成员函数用来对成员合理的访问. 所以封装本质是一种管理.

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

     类的作用域

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

    类的实例化

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

    可以看到, 当成员变量为公有属性时, 在类的外部进行成员访问时, 编译器推荐有4个选项_____________________________________________________________________

     再次观察, 将类中的成员变量用private修饰之后, 再次进行成员访问时, 编译器只允许调用公共区的ShowInfo()函数了.

     注意: 访问限定符只在编译的时候有效, 当数据映射到内存后, 没有任何区别.

    总结:

    访问限定符: 

    Pubulic(公有) | protected(保护) | private(私有);

    Public: 可以在类外直接被访问;

    Protec , private: 在类外无法直接被访问;

    Class的默认访问权限为private, 可以在类内使用public更改访问权限;

    访问限定符的作用域从当前限定符开始, 知道下一个访问限定符出现位置结束

    Struct的默认访问权限为public

    问题: C++中struct和class的区别是什么?

    答: 1 . struct 是沿用兼容C语言的语法,  C++可以在struct中定义成员函数

    2 .C++一般使用class, 默认访问权限是private , struct是public

    未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值