类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。
类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述共有接口。
类方法定义:描述如何实现类成员函数。
简单地说,类声明提供了类的蓝图,而方法定义提供了细节。
Person类的设计
Person 类具有 name 和 age 属性,提供初始化函数 (Init),并提供对 name 和 age 的读写函数(set,get),但必须确保 age 的赋值在有 效范围内(0-100),超出有效范围,则拒绝赋值,并提供方法输出姓名和年龄.
#include <iostream>
#include<cstring>
using namespace std;
class Person//抽象的
{
private:
char m_name[32];//定义类的时候 不要给成员初始化
int m_age;
public:
//初始化函数
void initPerson(char *name, int age)
{
if(name != NULL)
strcpy(m_name,name);
if(age>0 && age <100)
m_age = age;
}
//对m_name进行写操作
void setName(char *name)
{
if(name != NULL)
strcpy(m_name,name);
}
//对m_name进行读操作
char* getName(void)
{
return m_name;
}
//对m_age进行写操作
void setAge(int age)
{
if(age >0 && age <100)
m_age = age;
else
cout<<"age无效"<<endl;
}
//对m_age进行读操作
int getAge(void)
{
return m_age;
}
void showPerson(void)
{
cout<<"姓名:"<<m_name<<", 年龄: "<<m_age<<endl;
}
};
int main(int argc, char *argv[])
{
//通过类 实例化 一个对象(用Person定义一个变量)
Person lucy;//Person是类名称 抽象的 lucy是一个对象 实例(实际存在)
//对象 只能借助 公有方法 操作私有数据
//初始化
lucy.initPerson("lucy",18);
//获取姓名
cout<<"姓名:"<<lucy.getName()<<endl;
//获取年龄
cout<<"年龄:"<<lucy.getAge()<<endl;
//更改 年龄
lucy.setAge(200);
lucy.setAge(28);
//遍历lucy的信息
lucy.showPerson();
return 0;
}
运行结果:
立方体类的设计
求出立方体的面积( 2ab + 2ac + 2bc )和体积( a * b * c),分别 用全局函数和成员函数判断两个立方体是否相等。
#include <iostream>
using namespace std;
class Cub
{
private://确定数据
int m_l;
int m_w;
int m_h;
public:
//m_l m_w m_h有写操作
void setL(int l)
{
m_l = l;
}
void setW(int w)
{
m_w = w;
}
void setH(int h)
{
m_h=h;
}
//m_l m_w m_h有读操作
int getL(void)
{
return m_l;
}
int getW(void)
{
return m_w;
}
int getH(void)
{
return m_h;
}
//计算面积
int getS(void)
{
return 2*(m_l*m_w+m_l*m_h+m_w*m_h);
}
//计算体积
int getV(void)
{
return m_l*m_w*m_h;
}
//成员函数判断
bool myCompareCub2(Cub &ob)//类的内部 没有权限之分
{
if(m_l == ob.m_l && m_w == ob.m_w && m_h == ob.m_h)
return true;
return false;
}
};
//全局函数
bool myCompareCub1(Cub &c1, Cub &c2)
{
//类的外部 必须使用getL获取长度
if((c1.getL() == c2.getL()) && (c1.getW() == c2.getW()) && (c1.getH() == c2.getH()))
{
return true;
}
return false;
}
int main(int argc, char *argv[])
{
Cub cub1;//实例化一个对象
cub1.setL(10);
cub1.setW(10);
cub1.setH(10);
//计算面积
cout<<"cub1的面积:"<<cub1.getS()<<endl;
//计算体积
cout<<"cub1的体积:"<<cub1.getV()<<endl;
Cub cub2;//实例化一个对象
cub2.setL(10);
cub2.setW(20);
cub2.setH(10);
//全局函数
if(myCompareCub1(cub1,cub2) == true)
{
cout<<"相等"<<endl;
}
else
{
cout<<"不相等"<<endl;
}
Cub cub3;
cub3.setL(10);
cub3.setW(10);
cub3.setH(10);
//成员函数
if( cub3.myCompareCub2(cub1) == true)
{
cout<<"相等"<<endl;
}
else
{
cout<<"不相等"<<endl;
}
return 0;
}
运行结果:
设计一个点和圆的类
设计一个圆形类(AdvCircle),和一个点类(Point),计算点和圆的关系。
#include <iostream>
using namespace std;
//设计点的类
class Point
{
private:
int m_x;
int m_y;
public:
void setX(int x=0)
{
m_x = x;
}
void setY(int y=0)
{
m_y = y;
}
int getX(void)
{
return m_x;
}
int getY(void)
{
return m_y;
}
};
//设计圆的类
class circle
{
private:
Point m_p;//圆心
int m_r;//半径
public:
void setR(int r)
{
m_r = r;
}
int getR(void)
{
return m_r;
}
void setPoint(int x,int y)
{
m_p.setX(x);
m_p.setY(y);
}
Point getPoint(void)
{
return m_p;//得到圆心
}
//判断 点 在 圆的位置
void isPointOnCircle(Point &ob)
{
//点到圆心的距离
int distance = (m_p.getX()- ob.getX())*(m_p.getX()- ob.getX())+\
(m_p.getY()-ob.getY())*(m_p.getY()-ob.getY());
if(distance < m_r*m_r)
{
cout<<"点在圆内"<<endl;
}
else if(distance == m_r*m_r)
{
cout<<"点在圆上"<<endl;
}
else
{
cout<<"点在圆外"<<endl;
}
}
};
int main(int argc, char *argv[])
{
//实例化一个点对象
Point point;
point.setX(5);
point.setY(10);
//实例化一个圆的对象
circle cir;
cir.setPoint(5,5);//设置圆心
cir.setR(5);//设置半径
//判断点point 与 圆的关系
cir.isPointOnCircle(point);
return 0;
}
运行结果: