[C++] 二 类、对象、封装

类与对象:

类:一种抽象的概念,其内部是对某些行为和属性的总结

对象:根据类这个概念创造出来的实体,一个对象必然有一个类

需要注意的是,一定是先有类,再创建出这个类的对象;在学习static关键字之前,如果只有类没有 这个类的对象,这样的类没有意义

类的内容:类分为行为(成员函数)和属性(成员变量、数据成员)

类的内容主要通过行为和属性组成,行为是能做的事,通常使用函数来表示,也就是成员函数;

属性是存储的数据,通常称为成员变量

成员函数与成员变量统称为成员变量

//以手机为例:
class MobilePhone
{
public:   //公有权限:没有任何访问限制string brand; //品牌(属性)string model; //型号(属性)int weiget;   //重量(属性)void communicate() //通信(行为){cout << "可以通信" << endl;}void run_game() //运行游戏(行为){cout << "总有地上的生灵敢于直面雷霆的威光" << endl;}void play_music() //播放音乐(行为){cout << "只因你太美" << endl;}
};

实例化对象

对象的创建也被称为实例化,一个类只有创建了对象之后才有实体。

对象在C++中有两类:

1、栈内存对象

创建不使用任何关键字,在其生命周期(所在的{})结束后,自动被销毁

2、堆内存对象

创建使用new关键字,销毁使用delete关键字,不会自动销毁。堆内存对象使用指针进行保存

//接上面代码:
int main()
{//栈内存对象MobilePhone mp1; //调用属性mp1.brand = "8848钛金手机"; mp1.model = "A99 PULS MAX";mp1.weiget = 150;cout << mp1.brand << " " << mp1.model<< " " << mp1.weiget << endl;//调用成员函数mp1.communicate();mp1.play_music();mp1.run_game();//堆内存对象MobilePhone* mp2 = new MobilePhone;mp2->brand = "菠萝手机";mp2->model = "fandX800";mp2->run_game = 50;cout << mp2->brand << " " << mp2->model<< " " << mp2->weiget << endl;mp2->communicate();mp2->play_music();mp2->run_game()//手动销毁,销毁之后不要再使用delete mp2;mp2 = NULL;cout << "主函数结束" << endl;return 0;
}

delete之后的对象不要再使用,也不要使用delete关键字修饰栈内存对象。

堆内存对象如果忘记delete会造成内存无法释放,这种现象称为“内存泄漏”

封装

前面写的类特别像一个结构体,那是因为一个完全开放的类就是结构体。

class和struct的区别:class默认权限是私有属性,struct默认权限是公有属性

这样的类所有细节都暴露在外面,不符合面向对象的特性

面向对象的三大特性:封装、继承、多态

封装是指将一些属性和其他细节隐藏,重新提供给外部调用的接口。类似于测试中黑白盒子的概念

封装的三种权限:public:公共权限、private:私有权限、protected:保护权限

公共权限:所有成员都可访问

私有权限:在这个类的类内能访问但是在类外不能访问,如果我们要访问被设置为私有权限的属性,只能在public中设置一个成员函数去访问被设置为私有权限的属性,这个函数就是对外的接口

保护权限:和私权限很相似,但保护权限的子类是能访问protected的属性和行为,但私有权限的子类不能

提供给外部访问的隐藏属性的接口通常分为两种:

setter:用于写入属性值

getter:用于读取属性值

通过这两类公开接口对属性的读写权限分离控制

class MobilePhone
{
private:string brand = "山寨";string model = "8848";int weight = 666;public:string get_brand() // 只读{return brand;}void set_weight(int w) // 只写{weight = w;}string get_model() // 可读{return model;}void set_model(string m) // 可写{model = m;}void show(){cout << brand << endl;cout << model << endl;cout << weight << endl;}
};int main()
{MobilePhone mp1;mp1.show();mp1.set_model("14");mp1.set_weight(233);cout << mp1.get_brand() << " " << mp1.get_model() << endl;return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部