c++中的类

c++中的类

1 类的引入

2 类的定义

3 类的访问限定

4 类的作用域

5 类的对象的大小的计算

6 类成员函数的this指针

1 类的引入

1)c 语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
2)c++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
3)c语言中,结构体中只能定义变量,在c++中结构体不仅可以定义变量,还可以定义函数。
举个例子
在这里插入图片描述

2 类的定义

如上图所示,class为定义类的关键字,syudent,为类的名字,{}为类的主体,注意类定义结束时后面不能缺少的分号。

类定义的两种方式:

1)第一种就是声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

在这里插入图片描述
2)第二种就在.h文件中声明,在.cpp文件中定义。
在这里插入图片描述

3 类的访问限定符及封装

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
访问限定符分为:public(共有),protected(保护),private(私有)。
1 public 修饰的成员在类外可以直接访问;
2 protected和private 修饰的成员在类外不能直接被访问。
3 . **访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止。

4类的作用域

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

在这里插入图片描述

5 类的大小的计算

一个类的大小的计算方法;将类中的成员变量加起来,注意内存对齐。这和计算结构体类型变量的大小是一样的。
但是这里有一个特殊情况,就是空类的大小是多少呢?
空类举例
在这里插入图片描述
答案是在主流的编译器中:空类的大小为1字节,将空类的大小设置为1的目的就是为了区分空类定义出来的不同对象
下面具体来解释一下原因:
假设c为空类,我们用c类分别定义了三个对象 c1,c2,c3,那么这三个对象最终肯定是要存储在main 的栈帧中,首先我们得明确,c1,c2,c3他们是属于不同的对象。那么如果空类的大小为0,这三个对象最终将存储在相同的位置上,也就是说这三个对象的地址是一样的,那么c1,c2,c3就成为同一个对象。这样显然与我们的认知不符。

6 类成员函数的this指针

关于this 指针的用处,我们通过举例来说明:
在这里插入图片描述
这里就存在一个问题,Date类中有SetDate与Display两个成员函数,函数体中没有关于不同对象的区分,那当d1调用SetDate函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参
数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该
指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

简单点来说就是,this是一个指针,里面放置的是当前对象的地址(成员函数执行时,调用该成员函数的对象)。
this指针的特性:
1只能在“成员函数”中使用
2 this指针的类行—>* const;
3 this 指针没有存储在对象中,因此不会影响对象的大小,而是在成员函数运行时,时时刻刻指向当前对象。
4 this指针是“成员函数”第一个参数隐藏的参数,这里的隐藏是指用户在是西安成员函数时,不用显示给出,该参数是编译器自动添加的,也是由编译器自动来进行传递的
5 this指针主要是通过ecx寄存器来传递,但并不是所有都是通过this指针来传递的。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值