【C++学习笔记】 1.4 成员属性设置为私有

C++学习笔记

第1章 封装

1.4 成员属性设置为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限。

优点2:对于写权限,我们可以检测数据的有效性。

#include<iostream>
#include<string>

using namespace std;

class Person
{
public:
    //姓名  可读可写
    //设置姓名
    void setName(string name)
    {
      m_Name = name;
    }
    //获取姓名
    string getName()
    {
        return m_Name;
    }
    //获取年龄 只读
    string getAge()
    {
        m_Age = 0;  //初始化年龄
        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.getName()<<endl;
    
    p.setLover("XX");
    

    system("pause");

    return 0;
}


练习题:

设计一个立方体类(Cube),求出立方体的面积和体积,分别用全局函数和成员函数判断两个立方体是否相等。


#include<iostream>
#include<string>

using namespace std;

//立方体设计
//1.创建立方体类
//2.设计属性
//3.设计行为 获取立方体面积和体积
//4.分别利用全局函数和成员函数 判断两个立方体是否相等。

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_W*m_L;
   }

   //获取体积
   int calculateV()
   {
     return m_H*m_W*m_L;
   }

   //利用成员函数判断 两个立方体是否相等
   bool isSameByClass(Cube &c)
    {
    if(m_L==c.getL()&&m_W==c.getW()&&m_H==c.getH())
        {
          return true;
        }
    else 
        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;
    }
    else 
        return false;
};

int main()
{
    //创建立方体对象
    Cube c1;

    c1.setL(10);
    c1.setW(10);
    c1.setH(10);
 
    cout<<"c1 面积为:"<< c1.calculateS << endl;

    cout<<"c1 体积为:"<< c1.calculateV << endl;

    //创建第二个立方体对象
    Cube c2;

    c2.setL(10);
    c2.setW(10);
    c2.setH(10);
 
    cout<<"c2 面积为:"<< c2.calculateS << endl;

    cout<<"c2 体积为:"<< c2.calculateV << endl;

   //利用全局函数判断
    bool ret = isSame(c1,c2);

    if(ret)
    {
        cout<<"立方体相等"<<endl;
    }
    else
    {
        cout<<"立方体不相等"<<endl;
    }

   //利用成员函数判断
    ret = c1.isSameByClass(c2);

    if(ret)
    {
        cout<<"立方体相等"<<endl;
    }
    else
    {
        cout<<"立方体不相等"<<endl;
    }

    system("pause");
    return 0;
}

练习题:设计一个圆类(Circle)和一个点类(Point),计算点和圆的关系。


#include<iostream>
using namespace std;

//点类
class Point
{
public:
    //设置x
    void setX(int x)
    {
        m_X = x;
    }
    //获取x
    int getX()
    {
        return m_X;
    }
    //设置y
    void setY(int y)
    {
        m_Y = y;
    }
    //获取y
    int getY()
    {
        return m_Y;
    }

private:
    int m_X;
    int m_Y;
};

class Circle
{
public:
    //设置半径
    void setR(int r)
    {
        m_R = r;
    }
    //获取半径
    int getR()
    {
        return m_R;
    }
    //设置圆心
    void setCenter(Point center)
    {
        m_Center = center;
    }
    //获取圆心
    Point getCenter()
    {
        return m_Center;
    }

private:
    int m_R;

    //在类中可以让另一个类 作为 本类中的成员
    Point  m_Center;
};


//判断点和圆的关系
void isInCircle(Circle &c,Point &p)
{
    //计算两点之间距离 
    int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());

    //计算半径的平方
    int rDistance = c.getR() * c.getR();

    //判断关系
    if (distance == rDistance)
    {
        cout << "点在圆上" << endl;
    }
    else if (distance > rDistance)
    {
        cout << "点在圆外" << endl;
    }
    else
    {
        cout << "点在圆内" << endl;
    }
}


int main()
{
    //创建圆
    Circle c;
    c.setR(10);

    Point center;
    center.setX(10);
    center.setY(0);
    c.setCenter(center);

    //创建点
    Point p;

    p.setX(10);
    p.setY(10);

    //判断关系
    isInCircle(c, p);

    system("pause");
    return 0;
}

*将上述文件中的class分成分文件编写,下面的形式在大型工程中使用较多。


//main.c

#include<iostream>
#include"Point.h"
#include"Circle.h"
using namespace std;


//判断点和圆的关系
void isInCircle(Circle &c, Point &p)
{
    //计算两点之间距离 
    int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());

    //计算半径的平方
    int rDistance = c.getR() * c.getR();

    //判断关系
    if (distance == rDistance)
    {
        cout << "点在圆上" << endl;
    }
    else if (distance > rDistance)
    {
        cout << "点在圆外" << endl;
    }
    else
    {
        cout << "点在圆内" << endl;
    }
}


int main()
{
    //创建圆
    Circle c;
    c.setR(10);

    Point center;
    center.setX(10);
    center.setY(0);
    c.setCenter(center);

    //创建点
    Point p;

    p.setX(10);
    p.setY(10);

    //判断关系
    isInCircle(c, p);

    system("pause");
    return 0;
}


//Point.h

#pragma once
#include<iostream>
using namespace std;


class Point
{
public:
    //设置x
    void setX(int x);
   
    //获取x
    int getX();
    
    //设置y
    void setY(int y);
    
    //获取y
    int getY();
    

private:
    int m_X;
    int m_Y;
};


//Point.cpp

#include"Point.h"


//设置x
void Point::setX(int x)
{
   m_X = x;
}

//获取x
int Point::getX()
{
    return m_X;
}

//设置y
void Point::setY(int y)
{
    m_Y = y;
}

//获取y
int Point::getY()
{
    return m_Y;
    }



//Circle.h

#pragma once
#include<iostream>
#include"Point.h"
using namespace std;

class Circle
{
public:
    //设置半径
    void setR(int r);
    
    //获取半径
    int getR();
    
    //设置圆心
    void setCenter(Point center);
 
    //获取圆心
    Point getCenter();
 

private:
    int m_R;

    //在类中可以让另一个类 作为 本类中的成员
    Point  m_Center;
};


//Circle.cpp

#include "Circle.h"


//设置半径
void Circle::setR(int r)
{
        m_R = r;
    }

//获取半径
    int Circle::getR()
    {
        return m_R;
    }

//设置圆心
void Circle::setCenter(Point center)
{
        m_Center = center;
}
 
//获取圆心
 Point Circle::getCenter()
 {
        return m_Center;
  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值