c++:类和对象

类:

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。

C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。

由此可见,相对于c语言中结构体,类能够增加内置函数。

这是类中最简单的,仔细看上去跟struct基本一样,class相当于struct,后面的Date根据自己的需求取名即可,与struct不一样的是,struct定义后以后的使用还需要struct Date的形式,想要简化必须使用typedef,而class定义的类在以后的使用可以直接使用Date。

这是有了函数定义的类,你可能会奇怪,怎么不用传Date类型过来就能直接使用Date类里的成员变量,下面我们要通过this指针来解决这个问题

this指针

编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this 指针。⽐如Date类的Init的真实原型为, void Init(Date* const this, int year, int month, int day) • 类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给year赋值, >year = year; this • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显 ⽰使⽤this指针。就像这样

这里的this就是void Init(Date* const this, int year, int month, int day)中的this指针,通过这个this指针编译器能够确定每个类。

可在测试的时候发现init爆红了,这是为什么呢?这就需要我们接下来所讲的了

访问限定符

C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限 选择性的将其接⼝提供给外部的⽤⼾使⽤。

• public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访 问,protected和private是⼀样的,到后面的章节我们再来讲述它们的区别。

• 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有 访问限定符,作⽤域就到}即类结束。

• class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

• ⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public

很多人可能看完感觉还是很懵,且看接下来的演示

这时我们就会发现

init函数补爆红了,因为我们加了public,因为作用域是到下个访问限定符为止,所以在这个类中全部都是public的,而我们能够调用public中的内容,所以我们在使用这个函数时不会爆红了

而通常我们是将类中的函数进行public,类中的成员变量进行private,所以我们可以这样

这时类外的访问只能使用类中的函数,而不能直接对类中的成员变量进行修改,加强了安全性。

当然,类的函数也可以在类中声明,在类外定义。

需要注意,在类外定义时需要注明是那个类中的函数,像上面中定义的是Date中的函数,需要在函数名前加上Date::。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值