一、基本概念
封装:
1)把变量和函数合成整体,封装在一起
2)对变量和函数进行访问控制
访问权限:
类和struct区别,class中默认访问权限为Private, struct默认访问权限为public
成员变量和成员函数
将成员变量设置为Private,通过成员函数访问成员变量,可以实现“不准访问”、“只读访问”、“读写访问”,甚至你可以写出“只写访问”
class AccessLevels{
//通过成员函数对成员变量进行访问
public:
//对只读属性进行只读访问
int getReadOnly(){ return readOnly; }
//对读写属性进行读写访问
void setReadWrite(int val){ readWrite = val; }
int getReadWrite(){ return readWrite; }
//对只写属性进行只写访问
void setWriteOnly(int val){ writeOnly = val; }
//成员变量设置为private
private:
int readOnly; //对外只读访问
int noAccess; //外部不可访问
int readWrite; //读写访问
int writeOnly; //只写访问
};
练习:
请设计一个Maker类,Maker类具有name和age属性,提供初始化函数(Init),并提供对name和age的读写函数(set,get),但必须确保age的赋值在有效范围内(0-100),超出有效范围,则拒绝赋值,并提供方法输出姓名和年龄.(10分钟)
class Maker{
private:
int age;
string name;
public:
void Init(){
name = "aggz";
age = 18;
}
void setn(string setname){
name = setname;
}
void seta(int setage){
if(setage>=0 && setage<=100){age=setage;}
}
string getn(){
return name;
}
int geta(){
return age;
}
void print(){
cout<<"name:"<<name<<"age:"<<age<<endl;
}
};
二、面向对象程序设计案例:
1.立方体类
设计立方体类(Cube),求出立方体的面积( 2ab + 2ac + 2bc )和体积( a * b * c),分别用全局函数和成员函数判断两个立方体是否相等。
class Cube{
private:
int mL;
int mW;
int mH;
public:
void setL(int l){ mL = l; }
void setW(int w){ mW = w; }
void setH(int h){ mH = h; }
int getL(){ return mL; }
int getW(){ return mW; }
int getH(){ return mH; }
int calculateS(){
return(mL*mW + mL*mH + mW*mH)*2;
}
int calculateV{returnmL * mW * mH;}
//成员函数比较
bool compare(Cube&c){
if (getL() == c.getL() && getW() == c.getW() && getH() == c.getH()){
return true;
}
return false;
}
};
//全局函数比较
bool compare(Cube& c1,Cub& c2){
if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()){
return true;
}
return false;
}
//测试:
void test(){
Cub c1, c2;
c1.setL(10);
c1.setW(20);
c1.setH(30);
c2.setL(20);
c2.setW(20);
c2.setH(30);
cout << "c1面积:" << c1.caculateS() << " 体积:" << c1.caculateV() << endl;
cout << "c2面积:" << c2.caculateS() << " 体积:" << c2.caculateV() << endl;
//全局函数比较
if (CubCompare(c1, c2)){
cout << "c1和c2相等!" << endl;
}
else{
cout << "c1和c2不相等!" << endl;
}
//c1的成员函数比较
if (c1.CubCompare(c2)){
cout << "c1和c2相等!" << endl;
}
else{
cout << "c1和c2不相等!" << endl;
}
}
2.点和圆的关系
设计一个圆形类(AdvCircle),和一个点类(Point),计算点和圆的关系。
假如圆心坐标为x0, y0, 半径为r,点的坐标为x1, y1:
1)点在圆上:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) == r*r
2)点在圆内:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) < r*r
3)点在圆外:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) > r*r
//分文件
类声明 .h
类定义 .cpp