C++类和对象 基础部分

C++类和对象 基础部分

​ 众所周知,C语言是一门面向过程的语言,面向过程简单来说就是直接使用各种函数和数据来解决一件事。而面向对象是谁来使用函数和数据去解决一件事。

​ C++是一门既可以面向对象也可以面向过程的语言,它能够兼容C语言,并且对C语言进行了许多优化升级,其中最为重要的便是类和对象

​ 在C++中,struct升级成了类class,类是一种自定义类型,由这种类型声明的变量被称为“对象”,并且在类中,不仅可以定义变量,也可以定义函数

class和struct的区别

​ class具有三种访问限定符——公有,私有和保护,其中被保护和私有的成员我们无法在类外面进行访问。struct的默认访问限定符为public(公有),class默认为private(私有)。

为什么会出现类

​ 首先得提到面向对象的三大特性:封装、继承、多态C语言中数据和方法是分离的,任何人都可以访问和修改,并且函数也是能在随意的位置定义,安全性和可维护性都不高。在C++中,我们将类看作一个整体,函数和变量都被封装在类中,提高可维护性,而不想被随意访问的数据可以用访问限定符进行限制,提高了安全性。

image-20240711204455549

​ 其中,类的函数和变量被称为成员函数成员变量。在类中定义的函数默认为内联函数,并且类本身不占用空间(但是会开辟一个字节不存储数据,用于占位)

​ 当成员函数的访问权限为公有时,该函数代码段全部保存在公共代码区,也不占用内存。如下图,date1和date2是两个不同的对象,它们所调用的Print函数访问相同地址。

image-20240711230555098

​ 并且,以下代码也可以运行:

class Test {
public:
	void Print()
	{
		cout << "Print()" << endl;
	}
private:
	int a;
};
int main()
{
	Test* test1;
	test1 = nullptr;
	test1->Print(); //原因就在于成员函数在公共代码区,不需要解引用就可以找到该函数
}

​ 由此可见,类的出现增加了代码的安全性,可维护性,提高了运行效率和空间利用率👍

类的创建与使用

​ 如下代码,类的创建在函数外,全局都能使用。public和private(前期protected与private功能一致)为访问限定符,影响类中该限定符到下一个限定符之间的所有成员,如果不写则默认所有成员为私有

class ClassName { //class为关键字   ClassName为类名,可以自定义
public:
	//所有人都可以访问
private:
	//仅类中能够访问
};

​ 如果要使用类中的成员函数,我们需要创建一个对象,用对象调用函数,方法如下:

class Test {
public:
	void Print()
	{
		cout << "Test类的Print函数被调用了!" << endl;
	}
private:
	
}; //大括号以内为类的主体

int main()
{
	Test test1; //类名 对象名    创建一个名为test1的对象
    test1.Print() //对象名.成员函数名()
}

image-20240711234143675

​ private下的成员被使用则是不可访问状态,但是在类里面可以访问

image-20240711234520435

image-20240711234615139

成员函数的声明和定义分离

​ 在某些情况下,将成员函数的声明和定义分离,错误操作会导致找不到声明在哪:

image-20240711235447051

image-20240711235546810

​ 此时需要在成员函数前加上作用域,让定义找到声明的位置就可以使用了

image-20240712000201321

this指针

​ 如下代码,定义了两个对象test1和test2,两个对象分别调用GetNumber,那么编译器怎么分辨是test1调用的该对象还是test2调用的该对象呢🤔

image-20240712002301177

​ 其实是因为C++有一个隐性的指针this获取该对象的地址,并且会放在首个参数的位置,每次调用成员函数都会把对象的地址一起传过去,如下图:

image-20240712005650307

​ this指针在实参和形参处无法显式的写,只能在类里面使用,并且有const修饰,所以this是个指针常量。此外,this指针是一个形参,一般存在栈里面,vs编译器存在ecx寄存器中直接传递。

image-20240712003836473

结尾

​ 以上便是类和对象的基础部分,之后会对默认成员函数进行解析,如果有疑问或者建议都可以私信笔者交流,大家互相学习,互相进步!🌹

  • 34
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A.A呐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值