[C++笔记]类及其封装,作用域,访问限定符,实例化,对象,类与对象的大小

说明

汇编、C面向过程,关注过程,分析出求解问题的步骤,通过函数调用逐步解决问题
C++、java等面向对象,关注对象,将一件事情拆分成不同对象,靠对象之间的交互完成
注:C++基于面向对象,即面向过程与面向对象混编,因为C++兼容C。而java纯面向对象
如:设计简单外卖系统:
面向过程:关注实现下单接单送餐等过程。在代码层面即方法/函数。
面向对象:关注实现类对象(用户骑手商家)之间的关系。在代码层面即类的设计及类之间的关系。

面向对象三大特性:封装、继承、多态

本文先只提封装。
封装:1.数据和方法都放在类中 2.访问限定符
封装是严格管理,不封装是自由管理,基本上是封装更好

类的作用域:

类定义了一个新的作用域,叫作类域,类的所有成员都在类的作用域中。
在类体外定义成员(如声明与定义分开时),需要使用::作用域解析符指明成员属于哪个类域。

类的实例化:用类类型创建对象的过程

类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。
一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。

访问限定符:public(公有),protected(保护),private(私有)

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
    若后面无访问限定符,默认到类结束
  4. class的默认访问权限为private,struct为public(因为struct要兼容C)
    注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

建议在定义类时明确访问限定符,不要用默认属性

实际项目开发中,成员变量以及只在类内部使用的成员函数(只被成员函数调用的成员函数)都建议声明为 private,而只将允许通过对象调用的成员函数声明为 public。

成员函数内联

成员函数若在类内定义,编译器可能会将其作为内联函数处理。
若不希望类内成员函数内联,则可在类内声明函数,在类外(类体后面)通过域限定符定义。
若希望成员函数定义在类外时内联,则在定义时加inline关键字。

const成员函数

将const修饰的类成员函数称之为const成员函数。

//声明
const int fun();//const修饰返回值类型,表示返回的值不可修改。
int fun() const;//const修饰成员函数,表示该函数只可读取而不可修改成员变量的值。
//定义
int fun() const{
   
	return 0;
}
//const成员函数声明与定义都必须加const,因为带与不带const是两种不同的类型。

const修饰类成员函数,实际修饰的是该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

不需修改成员变量的成员函数推荐加const,以使得普通对象和const对象都可以调用,而需要修改成员变量的成员函数不能加,如日期类中+= ++ 等的实现。

类的大小

出于效率考量,类对象中只保存成员变量,成员函数存放在公共的代码段。
一个类或类对象的大小,实际就是该类中”成员变量”之和,也要进行内存对齐(对齐规则与C结构体一致)。

注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值