struct 和 class 区别–封装成员属性私有化–设计圆类(点和圆的关系)–如何设计类和头文件
内容纲要

struct 和 class 区别

在C++ 中 struct 和 class 唯一的 区别 就在于 默认的访问权限不同!!

struct 默认权限为公共
class 默认权限为私有

file

成员属性私有化

优点1:将所有成员属性设置为私有,可以自己控制读写权限。
优点2:对于读写权限,我们可以检测数据的有效性

  • 比如年龄的设置,可以在 set 函数中用 if 条件判断来限制传入的参数!!

    参考java 面向对象部分 set/get 方法。

案例:设计立方体类

设计立方体类:
1.求出立方体的面积和体积;
2.分别利用全局函数和成员函数判断两个立方体是否相等。
#include <iostream> 
#include "string"

using namespace std;

class Cube
{
public:
    double m_L;
    double m_W;
    double m_H;
    double area;
    double cube;

public:

    void setArea() {
        if ((m_L && m_W && m_H) != 0) {
         area = 2 * ((m_L * m_W) + (m_L * m_H) + (m_W * m_H));
        }
    }

    void setCube() {
        if ((m_L && m_W && m_H) != 0) {
         cube = m_L * m_W * m_H;
        }
    }

    bool compareCubeByClass( Cube c2) {
        return (m_W == c2.m_W) && (m_H == c2.m_H) && (m_L == c2.m_L) ? true : false;
    }

    void showInfo() {
        cout << "体积为:" << cube << "\t总面积为:" << area;
    }

};

bool compareCube(Cube c1, Cube c2) {
    return (c1.m_W == c2.m_W) && (c1.m_H == c2.m_H) && (c1.m_L == c2.m_L) ? true : false;
}

void main()
{
    Cube c1;
    c1.m_W = 10;
    c1.m_H = 20;
    c1.m_L = 30;
    c1.setArea();
    c1.setCube();
    c1.showInfo();

    cout << endl;
    Cube c2;
    c2.m_W = 10;
    c2.m_H = 20;
    c2.m_L = 30;
    c2.setArea();
    c2.setCube();
    c2.showInfo();

    bool res = c2.compareCubeByClass(c1);
    if (res == false)
    {
        cout << endl << "不是同一个" << endl;
    }
    else
    {
        cout << endl <<  "是同一个" << endl;
    }
}

点和圆之间的关系

设计一个圆类(circle),和一个点类(Point),计算点和圆的关系

圆内、圆外、圆上

  • 没必要用开放公式,直接对比平方就行。
#include <iostream>
#include <math.h>
using namespace std;

class Circle{
public:
    void setX(int x) {
        cx = x;
    }
    void setY(int y) {
        cy= y;
    }
    void setR(int r) {
        cr = r;
    }
    int getX() {
        return cx;
    }
    int getY() {
        return cy;
    }
    int getR() {
        return cr;
    }
private:
    int cr;  //定义半径
    int cx;  //定义X轴
    int cy;  //定义y轴
};

class Point{
public:
    void setX(int x) {
        px = x;
    }
    void setY(int y) {
        py = y;
    }
    int getX() {
        return px;
    }
    int getY() {
        return py;
    }
private:
    double px;  //定义点的x轴
    double py;  //定义点的y轴
};

int situation(Circle circle , Point point){
    int distance;
    int x2 = (unsigned int)((circle.getX() - point.getX()) * (circle.getX() - point.getX()));
    int y2 = (unsigned int)((circle.getY() - point.getY()) * (circle.getY() - point.getY()));
    distance = sqrt((unsigned)(x2 - y2));
    if (distance > circle.getR())
    {
        return 1;
    }
    else if (distance == circle.getR()) {
        return 0;
    }
    else
    {
        return -1;
    }
}

void main() {
    Circle C1;
    C1.setX(3);
    C1.setY(4);
    C1.setR(10);

    Point P1;
    P1.setX(13);
    P1.setY(4);
    Point P2;
    P2.setX(3);
    P2.setY(4);

    int res;
    res = situation(C1, P1);
    if (res == -1)
    {
        cout << "在圆内" << endl;
    }
    else if(res == 1) {
        cout << "在圆外" << endl;
    }
    else
    {
        cout << "在圆上" << endl;
    }
}

设计类和头文件模块化设计

  • 项目文件分为:circle.h circle.cpp point.h point.cpp 点和圆的关系.cpp

  • 目的是为了让结构更加清晰,所有代码可以分别封装在不同的文件。调用时逻辑更为合理

实现类
实现类中:主要存放main() 函数,以及实现某方法所需的函数
注意:要包含进point.h 和circle.h

file


点类头文件
头文件中:类的声明,方法的声明,以及局部变量的定义.
注意:这里只写定义,不写实现,看起来更有条理

file


点类实现.cpp文件
实现.cpp文件:主要针对头文件声明的函数进行具体实现.
注意:要 #include "头文件.h" ,以及 交代清楚实现的函数的作用域 ::

file


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇