自学内容网 自学内容网

Linux C++ 013-封装

Linux C++ 013-封装

本节关键字:Linux、C++、封装
相关库函数:

封装的意义

C++面向对象得三大特性:封装、继承、多态

语法
class 类名
{
访问权限:
属性/行为;
};
// 例如:
class PhoneInfo
{
public:
PhoneInfo();
~PhoneInfo();
private:
int  m_No;
protected:
char m_Name[64];
};

封装的意义

(1)将属性和行为作为一个整体,表现生活中的事物;
(2)属性和行为可以加以不同的权限,加以控制。

public     // (公共权限)类内可以访问,类外可以访问
protected  // (保护权限)类内可以访问,类外不能访问 - 儿子可以访问父亲的保护内容
private    // (私有权限)类内可以访问,类外不能访问 - 儿子不能访问父亲的私有内容

struct和class的区别

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

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

成员属性设置为私有

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

设计案例

(1)设计一个圆类,求圆的周长
(2)设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
(3)设计立方体类,求出立方体的表面积和体积,分别用全局函数和成员函数判断两个立方体是否相等

工程模块化
// circle.h
#pragma once

#include <iostream>
using namespace std;

class Point 
{
public:
    void setX(int x);
    int getX();
    void setY(int y);
    int getY();
private:
    int m_X;
    int m_Y;
};

class Circles 
{
public:
    void setR(int r);
    int getR();
    void setCenter(int x, int y);
    Point getCenter();
    void isInCircle(Circles& circle, Point& point);
private:
    int m_R;
    Point m_Center;
};
// circle.c
#include "circle.h"
void Point::setX(int x) 
{
    m_X = x;
}
int Point::getX() 
{
    return m_X;
}
void Point::setY(int y) 
{
    m_Y = y;
}
int Point::getY() 
{
    return m_Y;
}

void Circles::setR(int r) 
{
    m_R = r;
}
int Circles::getR() 
{
    return m_R;
}
void Circles::setCenter(int x, int y) 
{
    m_Center.setX(x);
    m_Center.setY(y);
}
Point Circles::getCenter() 
{
    return m_Center;
}
void Circles::isInCircle(Circles& circle, Point& point) 
{
    int distance; // 点和圆心距离的平方
    distance = (circle.getCenter().getX() - point.getX()) * (circle.getCenter().getX() - point.getX())
             + (circle.getCenter().getY() - point.getY()) * (circle.getCenter().getY() - point.getY());
    
    cout << "distance = " << distance << endl;
    cout << "m_R*m_R = " << m_R * m_R << endl;
    
    if (distance == (m_R ^ 2))
        cout << "点在圆上" << endl;
    
    else if (distance < (m_R ^ 2))
        cout << "点在圆内" << endl;
    else
        cout << "点在圆外" << endl;
}

原文地址:https://blog.csdn.net/qq_45157350/article/details/135867486

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!