类和对象基础知识(上篇)

主要介绍了类和对象的初阶知识

面向过程到面向对象的改变

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

类的定义

struct classname
{
	//成员函数 & 成员变量
	
};//分号注意

class classname
{
	//成员函数 & 成员变量
	
};//分号注意

C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类。和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是的成员默认访问方式是private

声明和定义分离

主要都是这种方式
在这里插入图片描述

声明和定义都在类体中

在这里插入图片描述

类的访问限定符及封装

访问限定符

访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

class的默认访问权限为privatestructpublic(因为C++ 的struct要兼容C) ,虽然是这样,但是还是建议明确访问限定,不用默认的

公有 public
public修饰的成员在类外可以直接被访问

私有 private
protectedprivate修饰的成员在类外不能直接被访问(此处protectedprivate是类似的)

保护 protected

封装

面向对象的三大特性:封装、继承、多态
数据操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
封装本质上是一种管理

类的作用域

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

void Student::ShowInfo()
{
	cout << _name << "-" << _age << "-" << _sex << endl;
}

类的实例化

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

一个类可以实例化出多个对象,实例化出的对象占用空间,存储了类的成员变量。
举个例子,实例化相当于现实生活中的按照图纸盖出房子,而就是图纸。图纸只是设计,建筑才占空间。

计算类对象的大小

类中有对象和方法,那么怎么算大小呢?
其实类大小,实际上就是成员变量大小之和,函数单独放在公共代码段。

在这里插入图片描述

注意:如果是空类,空类并不是0空间,编译器给了空类1字节空间来标识这个类,也就是占位

this指针

由于函数里面并没有区分不同对象,那么如果有一个类s1想调用函数,那这个函数是怎么知道是s1想调用呢?
C++使用了tihs指针解决了这个问题:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针的特性

  1. this指针的类型:类类型* const
  2. 友元函数没有 this 指针,因为友元不是类的成员。
  3. 只能在“成员函数”的内部使用(可以显式使用,但是一般不用)
  4. 不能显式的去传实参给this

this存在哪?

一般存在栈上,VS2019是存在ecx寄存器上。

this指针可以为空吗?

以下函数调用会发生什么?

class A
{
public:
void PrintA()
{
cout<<_a<<endl;
}
void Show()
{
cout<<"Show()"<<endl;
}
private:
int _a;
};
int main()
{
A* p = nullptr;
p->PrintA();
p->Show();
}

调用完发现,PrintA函数会崩溃,而Show正常,
所以只要不解引用就没事。

默认成员函数
类和对象基础知识(下篇)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eptcup_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值