【C++成长之路】C++类与对象(2)

类是抽象出的复杂数据类型,描述对象的共同属性和行为。对象是类的具体实例,类是设计图纸,对象是产品。C++中,类与结构体主要区别在于:类是引用类型,结构体是值类型;类支持继承和多态,结构体不具有这些特性。类使用堆存储,结构体使用栈存储。选择类还是结构体取决于应用场景,如数据复杂度、内存管理和抽象需求。

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

前言

     如何认识类

一. 什么是类

类是将同类对象的共同属性和行为抽象出来形成的一个相对复杂的数据类型, 这与结构体一样,都是为了描述一个相对复杂的对象。

二.类和对象之间的关系

*类相当于设计出来的图纸,对象相当于产品
1.对象是现实中的对象在程序中的模拟。
2.类是同一类对象的抽象,对象是类的某一特定实体。
3.定义类的对象,才可以通过对象使用类中定义的功能。

三.如何创建一个类

创建类的作用
创建类实质上就是将抽象出的数据,代码封装在一起(类声明中的{}),形成类。
*目的:增强安全性和简化编程,使用者不必了解具体细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。
语法形式
class 类名称
{
    public:
           公有成员(类与外部的接口)
    protected:
              保护型成员(类的继承)
    privat:
           私有成员(辅助作用的数据或函数)
}

 

四.如何创建一个类的对象

对象的创建
类名 对象名;
例如:Clock   myClock;

五.c++类和结构体有什么区别

区别

1.结构体是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。

2.结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)

栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.

堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低.

3.类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体也可以继承,也可以有函数(c中结构体没有函数),但是不具备类的继承多态特性

4.结构体赋值是 直接赋值的值. 而对象的赋值的是传递对象的地址

5.结构体内默认“数据“访问权限和继承权限是public,对象内“”成员“”默认访问权限和继承权限是private。结构体和类可以交叉继承,继承权限取决于子类而不是基类。

6.继承模板参数中,可以使用class定义,但是不能用struct来定义!

7.C语言中,空结构体的大小为0,而C++中空结构体/类 的大小为1。

        C++中空类的大小为1的原因:

  空类也可以实例化,类实例化出的每个对象都需要有不同的内存地址,为使每个对象在内存中的地址不同,所以在类中会加入一个隐含的字节。

一个类中,虚函数、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的。 
对象大小= vptr() + 所有非静态数据成员大小 + Aligin字节大小(依赖于不同的编译器)

如何选择类与结构体

1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构时最佳的选择,因为类访问数据 通常需要函数辅助

扩展

c中结构体与c++中结构体区别

1、C中结构体不能有成员函数,而C++中可以有,甚至可以有虚函数。所以C中不存在构造函数、虚构函数和this指针。
    2、C结构体只有public一种权限,而C++结构体有public、private、protect三种权限。
    3、C结构体没有继承关系,而C++结构体可以从类或者其他结构体继承而来。
    4、C结构体不能在结构体中初始化成员变量,而C++结构体可以。
    5、C结构体在定义时除非使用typedef,否则之后定义变量都必须跟上struct + 结构体名,而C++结构体可以直接使用结构体名,不受限制。
    6、C结构体不能有静态成员变量,而C++结构体可以有。
    7、C结构体的空结构体sizeof为0,C++的sizeof为1。
    8、数据隐藏,C结构体不存在数据隐藏这个概念,C++结构体有,因为C++面向对象。
    9、访问修饰符,C中没有访问修饰符,因为这些修饰符不被语言支配,C++中有,因为它是C++内置的。

 

总结

深刻理解类与对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值