封装
封装的意义:将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制
#include<iostream>
using namespace std;
//设计一个圆类,求圆的周长
const double pi =3.14;
class Circle
{
//访问权限
//公共权限
public:
//属性
//半径
int m_r;
//行为
//获取圆的周长
double calculateZC()
{
return 2*pi*m_r;
}
} ;
int main(){
//通过圆类 创建具体的圆(对象)
Circle cl;
//给圆对象的属性进行赋值
cl.m_r=10;
cout<<"圆的周长是:"<<cl.calculateZC()<<endl;
return 0;
}
#include<iostream>
#include<string>
using namespace std;
//设计一个学生类,属性为姓名和学号
class Student
{
//访问权限
//公共权限
public:
//属性
string m_name;
int m_id;
//行为
//显示姓名和学号
void showStudent()
{
cout<<"姓名:"<<m_name<<" 学号:"<<m_id<<endl;
}
void setname(string name)//通过行为给属性赋值
{
m_name=name;
}
} ;
int main(){
//实例化对象
Student s1;
//给s1对象的属性进行赋值
s1.m_name="张三";
s1.m_id=12;
s1.showStudent();
Student s2;
s2.setname("李四");
s2.m_id=2;
s2.showStudent();
return 0;
}
访问权限:
public(公共权限)——类内可以访问 类外也可
protected(保护权限)——类内可以,类外不可
private(私有权限)——类内可以,类外不可
#include<iostream>
#include<string>
using namespace std;
class Person
{
//访问权限
//公共权限
public:
string m_name;
//保护权限
protected:
string m_car;
//私有权限
private:
int m_password;//银行卡密码
public:
void func()
{
m_name="张三";
m_car="拖拉机";
m_password=123456;
cout<<m_name<<m_car<<m_password<<endl;
}
} ;
int main(){
//实例化对象
Person p1;
p1.m_name="李四";
cout<<p1.m_name<<endl;
p1.func();
cout<<p1.m_name<<endl;//覆盖了之前的赋值
return 0;
}
struct和class的区别:
struct默认权限为公共
class默认权限为私有
成员属性设置为私有化
#include<iostream>
#include<string>
using namespace std;
//成员属性设置为私有化
//好处:可以自己控制读写权限 对于写可以检测数据有效性
class Person
{
public:
//设置姓名
void setName(string name)
{
m_name=name;
}
//获取姓名
string getName()
{
return m_name;
}
//获取年龄
int getAge()
{
m_age=100;
return m_age;
}
//设置情人
void setLover(string lover)
{
m_lover=lover;
}
private:
//姓名 可读可写
string m_name;
//年龄 只读
int m_age;
//情人 只写
string m_lover;
} ;
int main(){
//实例化对象
Person p;
p.setName("张三");
cout<<"姓名为"<<p.getName()<<endl;
cout<<"年龄为"<<p.getAge()<<endl;
p.setLover("翠花");//只能设置不能访问
return 0;
}
案例:设计立方体类
#include<iostream>
#include<string>
using namespace std;
//设计立方体类
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_h*m_l+2*m_h*m_w+2*m_l*m_w;
}
int CalculateV()
{
return m_h*m_l*m_w;
}
bool isSamebyclass(Cube&c)
{
if(m_l==c.getl()&&m_w==c.getw()&&m_h==c.geth())
{
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.getw()==c2.getw()&&c1.geth()==c2.geth())
{
return true;
}
}
int main(){
Cube c1;//创建立方体对象
c1.seth(10);
c1.setl(20);
c1.setw(3);
cout<<"c1的面积为:"<<c1.CalculateS()<<endl;
cout<<"c1的体积为:"<<c1.CalculateV()<<endl;
//创建第二个立方体
Cube c2;
c2.seth(10);
c2.setl(20);
c2.setw(3);
//利用全局函数判断两个立方体是否相等
bool ret =isSame(c1,c2);
if(ret)
{
cout<<"c1和c2相等"<<endl;
}
else
{
cout<<"c1和c2不相等"<<endl;
}
//利用成员函数判断
ret=c1.isSamebyclass(c2);
if(ret)
{
cout<<"成员函数判断:c1和c2相等"<<endl;
}
else
{
cout<<"c1和c2不相等"<<endl;
}
return 0;
}