一、概述
面向对象编程的特性: 抽象、封装、继承、多态
二、封装
2.1概念
把属性和行为整合起来,外壳用类这个自定义的数据类型封装起来,该隐藏的隐藏起来,该暴露的暴露出来!一般属性都是隐藏起来的 private、protected; 行为都是暴露出来 public。
1)公有( public )成员可以在类外访问;
2)私有( private )成员只能被该类的成员函数访问;
3)保护( protected )成员只能被该类的成员函数或派生类的成员函数访问。
#include <iostream>
using namespace std;
#include <string>
/*
手机类:
属性:品牌、型号、运行内存、内存、价格、颜色、像素、尺寸、密码
行为:开机、关机、拍照、打电话、发短信、设置密码....
*/
class Phone
{
public:
void turnOn()
{
cout << "手机开机...." << endl;
}
void turnOff()
{
cout << "手机关机...." << endl;
}
void takePhoto()
{
cout << "手机拍照...." << endl;
}
void call()
{
cout << "手机呼叫...." << endl;
}
void sendMes()
{
cout << "手机发信息...." << endl;
}
void setPwd(string pwd)
{
this->pwd = pwd; //建议在类的成员函数中如果要访问类的成员,记得在成员前面加上this指针,
//可以避免当形参的名字和成员名字一样时,没法区分的问题!
}
void show()
{
cout << this << endl;
cout << "密码为:" <<this->pwd << endl;
}
private:
string brand;
string type;
int ram;
int rom;
int price;
string color;
int pix;
int size;
string pwd;
};
定义一个数据类型,是不占内存空间的,但是它本身是有大小的;sizeof只有在定义变量的时候,才会分配内存空间!!!
2.2类对象的创建
类和对象在内存中的关系:所有的这个类的对象共用一份成员函数;这个类的所有的对象都拥有一份自己的数据成员。创建对象的时候,其实是给数据成员分配内存空间的!
int main()
{
//类对象的创建格式:数据类型名 对象名(变量名);
Phone myphoneA;
//访问:对象名.成员函数();
//myphoneA.turnOn();
return 0;
}
三、继承
3.1作用
实现代码扩展
Is a -à继承关系 A is a B
这个已有的类称为基类,新建的类称为子类。例如,定义手机是基类,那么派生类可以是华为或者是苹果,等等。
#include <iostream>
using namespace std;
#include <string>
//人类: 属性:姓名、性别、年龄 行为:吃 、睡、show
//工人类: 属性:姓名、性别、年龄、工