1、面向对象的三大特征
封装、继承、多态
2、类和对象
2.1 概念
类:类是一个抽象的概念,用于描述同一类对象的特点,包含属性和行为
属性:描述类的数据,一般都是名词
行为:描述类的具体操作,一般都是动词
对象:根据类的概念所创造的实体
例如:类是人类,对象是张三,属性:姓名 性别 年龄,行为:吃喝睡 学习 睡觉
2.2 类的实例化
类中有两方面内容:
(1)行为:通过函数实现,也被称为“成员函数”
(2)属性:保存一些数据元素,也被称为“成员变量”
注意:
(1)一个对象,必须由其相对应的类去创建(实例化)
(2)一个类,如果不用来实例化对象,那么它是没有意义的,除了抽象类
实例化:类创建对象的过程叫做类的实例化
例如:创建手机类,属性:品牌、颜色、价格;行为:播放音乐、播放视频
2.2.1 类的格式
class name{public:name() {}};
2.2.2 栈内存对象
栈内存对象:在栈区分配空间,由计算机自动回收
用 . 的方式调用成员,对象所在的{ }执行完毕后,自动被销毁
#include <iostream>using namespace std;class Phone{public: //public是权限修饰符,代表公有的(类内、类外都可以访问),表示该属性或行为可以在类外进行访问//属性------>成员变量string brand; //品牌string color; //颜色double price; //价格public://行为------>成员方法void play_music() {cout<<"播放音乐"<<endl;}void play_video(){cout<<"播放视频"<<endl;}};int main(){//创建对象Phone p1; //栈内存对象
//初始化对象的属性p1.brand="华为";p1.color="红色";p1.price=9999;//访问或获取对象的属性cout<<p1.brand<<endl;cout<<p1.color<<endl;cout<<p1.price<<endl;//调用对象的方法,可以重复调用p1.play_music();p1.play_video();p1.play_music();return 0;}
2.2.3 堆内存对象
堆内存对象:在堆区分配空间
用new关键字创建,对象类型的指针(Computer *) ,指向new关键字开辟的空间
使用->的方式进行调用,堆内存对象需要使用delete关键字手动销毁,并把对象指针置为NULL;如果不销毁会造成内存泄漏,会导致程序的卡顿
#include <iostream>using namespace std;class Phone{public: //public是权限修饰符,代表公有的(类内、类外都可以访问),表示该属性或行为可以在类外进行访问//属性------>成员变量string brand; //品牌string color; //颜色double price; //价格public://行为------>成员方法void play_music() {cout<<"播放音乐"<<endl;}void play_video(){cout<<"播放视频"<<endl;}};int main(){Phone*p2=new Phone;
//初始化对象的属性p2->brand="苹果";cout<<"请输入手机的颜色:";cin>>p2->color;cout<<endl<<"请输入价格:";cin>>p2->price;cout<<"品牌:"<<p2->brand<<",颜色:"<<p2->color<<",价格:"<<p2->price<<endl;p2->play_music();//注意:要及时手动释放,避免内存泄漏
delete p2;
p2=NULL;
return 0;}
3、 封装
通常情况下,我们会把类中的属性进行封装,就是把属性的权限改成private(私有的),此时,如果外部需要访问类中的私有属性,我们可以提供该属性对外的读或写接口
封装提高了程序的安全性
#include <iostream>using namespace std;class Phone{private: //私有的:该属性只能在类内访问,不能在类外访问,更安全了//属性------>成员变量string brand; //品牌string color; //颜色double price; //价格public://行为------>成员方法void play_music() {cout<<"播放音乐"<<endl;}void play_video(){cout<<"播放视频"<<endl;}//给brand提供一个写接口void set_brand(string a){brand=a;}//给brand提供一个读接口
string get_brand(){return brand;}};int main(){Phone p1;//通过接口访问私有属性p1.set_brand("小米");cout<<"品牌:"<<p1.get_brand();return 0;}