一、封装
c++面向对象的三大特性为:封装、继承、多态
封装的意义:将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制
二、案例
//创建一个圆类
class Circle()
{
//访问权限
//公共权限
public:
//属性
int m_r;
//行为
double calculateZC()
{
return 2*PI*m_r;
}
};
int main()
{
//实例化类---对象
Circle c1;
c1.m_r = 10;
cout<<"圆的周长为:"<< cl.calculateZC() <<endl;
return 0;
}
//创建一个学生类
class Student()
{
//访问权限
//公共权限
public:
//属性(成员属性,成员方法)
string m_Name;
int m_Id;
//行为(成员函数,成员方法)
public:
void showStudent()
{
cout<<"姓名:"<< m_Name <<"学号:"<< m_Id <<endl;;
}
void setName(string name)
{
m_Name = name;
}
void setId(int id)
{
m_Id = id
}
};
int main()
{
//实例化类---对象
Student Stu;
Stu.setName("德玛西亚");
Stu.setId(10);
Stu.showStudent();
return 0;
}
三、权限
公共权限 public 成员 类内可以访问 类外可以访问
保护权限 protected 成员 类内可以访问 类外其子类可以访问
私有权限 private 成员 类内可以访问 类外不能访问
//创建一个学生类
class Father()
{
//公共权限
public:
string m_Name;
//保护权限
protected:
string m_Car;
//私有权限
private:
int m_Id;
//行为(成员函数,成员方法)
public:
void ()
{
n_Name = "张三";
m_Car = "兰博基尼";
m_Id = 123456;
}
}
int main()
{
//实例化类---对象
Father f1;
f1.m_Name = "李四";//可以访问
//f1.m_Car = "拖拉机";//不能访问
//f1.m_Id = 1234456788;//不能访问
//f1.func();//不能访问
return 0;
}
四、class与struct的区别
class与struct均可以创建类
class默认权限是私有权限,struct默认权限是公共权限
五、成员属性修改
class Person()
{
public:
//姓名设置可读可写
void setName(string name)
{
m_Name = name;
}
string getName()
{
return m_Name;
}
//只读年龄
void getAge()
{
return m_Age;
}
//只写爱人
void setLover(srting lover)
{
m_Lover = lover
}
private:
string m_Name;//可读可写
int m_age = 10;//只读
string m_lover;//只写
}
int main()
{
Person p1;
//姓名可读可写
p1.setName("张三");
cout<<"姓名:"<<p1.getName()<<endl;
//年龄只读
cout<<"年龄:"<<p1.getAge()<<endl;
//爱人只写
p1.setLover("苍井")
return 0;
}
六、封装案例
class cube()
{
public:
//设置、获取长度
void setL(int l)
{
m_l = l;
}
int getL()
{
return m_l;
}
//设置、获取宽度
void setW(int w)
{
m_w = w;
}
int getW()
{
return m_w;
}
//设置、获取高度
void setH(int h)
{
m_h = h;
}
int getH()
{
return m_h;
}
//获取立方体面积
int calculateS()
{
return 2*m_l*m_h + 2*m_l*m_w + 2*m_h*m_w;
}
//获取立方体体积
int calculateV()
{
return m_l*m_h*m_w;
}
//利用成员函数判断俩个立方体是否想等
bool isSamebyClass(Cube &c)
{
if(c.getL() = m_l && c.getH() = m_h && c1.getW() = m_w)
{
return true;
}
return false;
}
private:
int m_l;
int m_w;
int m_h;
}
//利用全局函数判断俩个立方体是否想等
bool isSame(Cube &c1, Cube &c2)
{
if(c1.getL() = c2.getL() && c1.getH() = c2.getH() && c1.getW() = c2.getW())
{
return true;
}
return false;
}
int main()
{
//创建第一个立方体
Cube c1;
c1.setL(10);
c1.setH(10);
c1.setW(10);
cout<<"面积为:"<< c1.calculateS() << endl;
cout<<"体积为:"<< c1.calculateV() << endl;
//创建第二个立方体
Cube c2;
c2.setL(10);
c2.setH(10);
c2.setW(10);
cout<<"面积为:"<< c2.calculateS() << endl;
cout<<"体积为:"<< c2.calculateV() << endl;
//全局函数判断
ret = isSame(c1,c2);
if(ret)
{
cout<<"全局函数判断:c1与c2是相等的"<<endl;
}
else
{
cout<<"全局函数判断:c1与c2是不相等的"<<endl;
}
//成员函数判断
ret = cl.isSamebyClass(c2);
if(ret)
{
cout<<"成员函数判断:c1与c2是相等的"<<endl;
}
else
{
cout<<"成员函数判断:c1与c2是不相等的"<<endl;
}
return 0;
}