1.封装

两层含义:

(1)把事物的属性和方法结合成个整体。

(2)对类的属性和方法进行访问控制,对不信的进行信息屏蔽。

2.访问控制

控制分为 类的内部,类的外部。

public 修饰的成员,可在内部和外部访问。

private 修饰的成员,只能在内部访问。

封装就像一个手表,里面有很复杂的功能,但输出只有表盘,输入只能转转轴。

3. 类与对象

抽象一个类,用类去定义对象。

类是数据类型,是抽象的,对象是具体的变量,占用内存空间。

4. struct 和 class 关键字的区别

在 struct 定义的类中,所有成员的默认访问控制为 public

在 class 中 为 private。

5. 练习

(1)设计立方体类(cube),求出立方体的面积和体积,求两个立方体,是否相等。

#include <iostream>
using namespace std;

class cube{
private:
    double length;
    double high;
    double width;
public:
    double getLength()
    {
        return length;
    }
    double getHigh()
    {
        return high;
    }
    double getWidth()
    {
        return width;
    }
    void setLength(double length)
    {
        this->length = length;
    }
    void setWidth(double width)
    {
        this->width = width;
    }
    void setHigh(double high)
    {
        this->high = high;
    }
    double getArea()
    {
        ;
    }
    double getVolume()
    {
        ;
    }
    bool isEqualCube1(class cube c);
    bool isEqualCube2(class cube *c);
    bool isEqualCube3(class cube &c);
protected:

};
bool cube::isEqualCube1(class cube c)
{
    /* 下面的函数调用体现出封装的强大,因为复制的参数,不仅带有属性,还有函数 */
    if (c.getLength() == this->length &&
        c.getHigh() == this->high &&
        c.getWidth() == this->width)
        return true;
    else
        return false;
}
bool cube::isEqualCube2(class cube *c)
{
    if (c->getLength() == this->length &&
        c->getHigh() == this->high &&
        c->getWidth() == this->width)
        return true;
    else
        return false;
    return true;
}
bool cube::isEqualCube3(class cube &c)
{
    if (c.getLength() == this->length &&
        c.getHigh() == this->high &&
        c.getWidth() == this->width)
        return true;
    else
        return false;
}

void main(void)
{
    class cube c1, c2;
    c1.setHigh();
    c1.setLength();
    c1.setWidth();
    c2.setHigh();
    c2.setLength();
    c2.setWidth();

    cout << "c1's area = " << c1.getArea() << endl;;
    cout << "c2's volume = " << c2.getVolume() << endl;

    if (c1.isEqualCube1(c2))
        cout << "c1 == c2" << endl;
    else
        cout << "c1 != c2" << endl;

    system("pause");
    return ;
}

C++基础 C++对类的管理——封装的更多相关文章

  1. MIT 2012分布式课程基础源码解析-事件管理封装

    这部分的内容主要包括Epoll/select的封装,在封装好相应函数后,再使用一个类来管理相应事件,实现的文件为pollmgr.{h, cc}. 事件函数封装 可看到pollmgr.h文件下定一个了一 ...

  2. Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)

    package com.ad.ssp.engine.common; import java.io.IOException; import java.util.ArrayList; import jav ...

  3. 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理

    在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...

  4. UML基础系列:类图

    类图描述系统中类的静态结构,它不仅定义系统中的类,描述类之间的联系,如关联.依赖.聚合等,还包括类的内部结构(类的属性和操作).类图描述的是静态关系,在系统的整个生命周期中都是有效的.对象图是类图的实 ...

  5. Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)——java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

  6. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  7. 【CUDA 基础】4.2 内存管理

    title: [CUDA 基础]4.2 内存管理 categories: - CUDA - Freshman tags: - CUDA内存管理 - CUDA内存分配和释放 - CUDA内存传输 - 固 ...

  8. Objective-C 基础教程第九章,内存管理

    目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...

  9. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

随机推荐

  1. CentOS 上安装 GIT 服务

    获取 YUM 中 GIT 信息:    yum info git 查看当前 GIT 的版本:    git --version    或    git version 卸载当前版本的 GIT:     ...

  2. u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划

    u-boot分析(十一) 通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过, ...

  3. Struts2_Struts标签

    1.property <s:property value="username" /> 一般访问,访问ValueStack中的第一个username <s:prop ...

  4. 《深入理解Java7核心技术与最佳实践》读书笔记(1.1)---Project Coin介绍

    OpenJDK中的Coin项目(Project Coin)的目的就是为了收集对Java语言的语法进行增强的建议.在Coin项目开始之初,曾经广泛地向社区征求提议.在短短的一个月时间内就收到将近70条提 ...

  5. HTML5 data-* 自定义属性操作及其注意点

    在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,命名可以用驼峰命名方式,但取值是必需全部使用小写(后面会说),使用这样的结构可以进行数 ...

  6. gitlab安装详解

    官方网站---https://www.gitlab.com.cn/downloads/ 1.选择操作系统 例如:CentOS6.CentOS7.Ubuntu12.04.Ubuntu14.04等,选择相 ...

  7. Python基础学习之字符串(2)

    字符串常用方法 1.s.capitalize() 描述:返回字符串s的副本,并将首字符变为大写. 示例: >>> s='yesterday when I was Young!' &g ...

  8. 笨办法学Python(二十九)

    习题 29: 如果(if) 下面是你要写的作业,这段向你介绍了“if语句”.把这段输入进去,让它能正确执行.然后我们看看你是否有所收获. people = 20 cats = 30 dogs = 15 ...

  9. Python 类的高级属性(可选)

    1.slots实例:限制类的实例有合法的属性集,只有__slots__属性列表中的属性才可能成为实例属性. 对象的实例通常没有一个属性字典,可以在__slots__列表中包含一个属性字典__dict_ ...

  10. jQuery获取Select选择的Text和Value[转载]

    语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var ch ...