面向对象基础
1.类与对象的概念
面向对象三大特征:封装 ,继承,多态
类与对象
类:同一类事物(对象)共同特征概括提取出来,就形成了类。是个抽象的概念
对象:由类创建的具体实体
对象中包括属性和行为
属性:用来描述对象的数据,通常是名词
行为:用来描述对象的操作,通常是动词
手机 属性 :内存 ,品牌 ,型号,重量
行为: 播放音乐 运行游戏 播放视频 通讯
人 属性: 姓名 性别 年龄
行为: 吃饭 睡觉 玩游戏 学习
长方形 属性:长 宽
行为:求面积 求周长
属性通常称为数据成员 /成员变量
行为通常称为成员函数/成员方法
成员函数和成员变量统称为对象的成员
手机类:
#include <iostream>
using namespace std;
class MobliePhone{ //class是类的关键字 通常类名首字母大写
public: //public权限是公共权限 ,在类内和类外都可以访问
string brand;
string model;
double weight;
void play_music()
{
cout<<"播放《爱你一万n》"<<endl;
}
void run_game()
{
cout<<"运行《原神666》"<<endl;
}
void play_video()
{
cout<<"播放《狂飙666》"<<endl;
}
void show()
{
cout<<"品牌"<<brand<<" "<<"型号"
<<model<<" "<<"重量"<<weight;
}
};
int main()
{
}
2.类的实例化
由类创建对象的过程叫类的实例化
对象的创建有两种:1.栈内存对象 2.堆内存对象
栈内存对象:出了作用范围(两个花括号之间)自动的销毁,调用成员使用 对象名.成员的方式来调用
堆内存对象:使用new关键字进行创建。堆内存对象使用对象指针来保存堆内存对象的地址,对象指针使用 ->的方式访问成员。
堆内存对象不会自动销毁,需要delete关键字进行手动销毁。如果不销毁,这块内存会被持续占用,造成内存泄漏,造成程序的卡顿。通常delete对象指针后,把对象指针置为NULL
#include <iostream>
using namespace std;
class MobliePhone{ //class是类的关键字 通常类名首字母大写
public: //public权限是公共权限 ,在类内和类外都可以访问
string brand;
string model;
double weight;
void play_music()
{
cout<<"播放《爱你一万n》"<<endl;
}
void run_game()
{
cout<<"运行《原神1》"<<endl;
}
void play_video()
{
cout<<"播放《狂飙66》"<<endl;
}
void show()
{
cout<<"品牌"<<brand<<" "<<"型号"
<<model<<" "<<"重量"<<weight;
cout<<endl;
}
};
int main()
{
//栈内存对象
MobliePhone phone1; //phone1是对象名字
phone1.brand="华";
phone1.model="P60";
phone1.weight=100;
phone1.play_music();
phone1.play_video();
phone1.run_game();
phone1.show();
//堆内存对象
MobliePhone * phone2=new MobliePhone;
phone2->brand="iphon";
phone2->model="13pro";
phone2->weight=120;
phone2->show();
delete phone2; //delete释放phone2指针指向的堆内存
cout<<phone2<<endl; //0x7518f8 但是指针还保留着释放内存的地址
phone2=NULL; //为了安全,指针指向置为NULL
}
类与对象练习:
Car类 属性:brand 品牌 seat 座位数量 wheel 轮子数量
方法 run() xx牌的汽车在行驶
show() 打印出上面的属性信息
分别实例化栈和堆内存对象。来调用方法
#include <iostream>
using namespace std;
class Car{
public:
//brand 品牌 seat 座位数量 wheel 轮子数量
string brand;
int seat;
int wheel;
void run(){
cout<<brand<<"牌的汽车在行驶"<<endl;
}
void show(){
cout<<"品牌:"<<brand<<" 座位数量:"<<seat<<" 车轮数量:"<<wheel<<endl;
}
};
int main()
{
//栈内存对象
Car car1; //创建car1对象
car1.brand="奥迪迪";
car1.seat=5;
car1.wheel=4;
car1.run();
car1.show();
//堆内存对象
Car * car2=new Car;
car2->brand="宝马马";
car2->seat=4;
car2->wheel=4;
car2->run();
car2->show();
delete car2;
car2=NULL;
}