类和对象——开始步入正轨

本文介绍了C++中类的概念,包括成员变量、成员函数的定义与调用,以及构造函数、析构函数、拷贝构造和访问限定符的作用。还讨论了类对象的实例化、this指针和默认构造函数的行为。

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

C++兼容C,C++把结构体升级成了类;

(1)类里面可以有数据,这个数据叫成员变量。

(2)类里面还可以定义函数。

(3)C语言 struct ListNode是类型,C++里面ListNode就是类型,不用在前面加上struct

这个就是在类里面定义函数

调用类里面的函数时就这样写

在C++中,更喜欢用Class来定义类

类的定义

定义的函数叫成员函数

定义的变量叫成员变量

类的名称就是类型,用类的类型去定义一个变量,C++里更喜欢将定义出来的的变量叫对象

假如把类的声明和定义分开写

这就是类的声明

这是类的定义

而且还要加上圈中的部分,这是告诉编译器Init是Stack这个类里面的函数,不是全局函数

类的访问限定符

C++的访问限定符有三种

分别是公有、保护和私有

一个类大部分情况下,成员变量是私有的,成员函数给别人用的就是共有的不给别人用的就是私有的

成员变量都会加个_避免与成员函数中的参数重名导致程序错误

类对象实例化

类里面定义的成员变量其实只是一种声明

只有在主函数里开空间了才算是定义,这个也叫类对象的实例化

这有道题

A1里面定义了一个int变量,所以它的大小就是4,但A2和A3什么都没定义,其实也占一个字节的空间,这一个字节其实用来占位的,标识对象存在过

this指针

在每次调用成员函数时编译器也会给这个函数里加一个this指针

调用的时候也会改,也是编译器偷偷改

在类里面其实也可以使用this,但是在实参和形参的部分不能加

因为this是个隐含的形参,所以他存在栈里面

构造函数

类和对象里面其实是有6个默认成员函数

一个类有多个构造函数,就证明他有多个初始化方式

以后在类里面直接构造一个初始化函数,当下次实例化的时候就会自动调用构造函数,这个还是函数重载,无参的不开空间,有参的开空间

这里明显能看到初始化了

像构造函数这种的函数如果我们不写系统就会默认生成,但是这次生成的值却是随机值

其实是C++会把类型分为内置类型和自定义类型

int/char/double和指针等等都是内置类型

用户自定义的类型就是自定义类型

默认生成的构造函数

1、内置类型成员不作处理

2、自定义类型的成员,会去调用他的默认构造(不用传参数的构造)

其实也可以在声明位置给缺省值,就会去用缺省值来初始化

析构函数

每次开完空间后都需要销毁,所以就有了析构函数,return 之前自动释放空间

这就是析构函数,程序解释后就会自动调用

先来写一个日期类

再将对象实例化,接着打印出来

或者直接将构造函数的参数改成全缺省

拷贝构造

就相当于实例化后的对象之间进行赋值,内置类型不用拷贝构造,自定义类型无论简单或复制都需要写一个拷贝构造

这里的意思就是实例化一个d2,然后将d1的值赋值给d2

还有这种写法

而且最好加个const,就会避免代码写反了的问题

练习——求当前日期的x天后的日期

可以先写一个求每一月天数的函数

然后写出求日期函数

默认生成拷贝构造和赋值重载:

对于内置类型,如果不写拷贝构造编译器会进行值拷贝(按字节一个一个拷贝)

对于自定义类型,不写拷贝构造则会调用这个成员的拷贝构造/赋值重载

对于类和对象来说,符合栈的结构——后定义的先析构

什么情况下需要实现拷贝构造?

自己实现了析构函数释放空间,就需要实现拷贝构造

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值