三种类的设计

类是一种将抽象转换为用户定义类型的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;
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值