• C++对象和类概述


    11 对象和类

    11.1 过程式和面向对象编程

    面向过程编程:先考虑函数,然后再细化到数据

    面向对象编程:对象(数据+函数)

    11.2 抽象和类

    在计算中,抽象是根据与用户的接口来表示信息的关键步骤。

    11.2.1 什么是类型?

    总之,只当基本类型完成了三项工作

    • 1.决定数据对象需要的内存数量
    • 2.决定如何解释内存中的位(long和float在内存中占用的位数相同,但将它们转换位数值的方法不同)
    • 3.决定可使用数据对象执行的操作或方法

    11.2.2 C++中的类

    类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

    自定义类的思路:以股票为例

    1.首先要思考要将什么作为一个基本单位:你可以把一个人目前持有的某只股票作为一个基本单位

    2.需要哪些功能(方法)

    1. 获得股票
    2. 增持
    3. 卖出股票
    4. 更新股票价格
    5. 显式关于所持股票的信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.需要存储哪些信息

    1. 公司名称
    2. 所持股票的数量
    3. 每股的价格
    4. 股票总值
    
    • 1
    • 2
    • 3
    • 4

    4.定义类

    • 1.类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述共有接口。
    • 2.类方法定义:描述如何实现类成员函数

    什么是接口?

    接口是一个共享框架,供两个系统交互时使用。—如在计算机和打印机之间或者用户或计算机程序之间。

    接口的含义:让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。

    img

    11.2.3 访问控制

    使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。因此公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。

    数据隐藏:程序无法访问对象的私有成员。它保证了数据的完整性。(不仅不允许程序员直接访问数据,而且确定了函数的接口,然后当你发现更好的方式实现函数时,你可以直接更改函数具体的实现而无需更改接口,这提高了程序的可维护性)

    封装:数据隐藏(将数据放入类的私有成员),在私有部分中隐藏实现的函数细节,将类函数定义放在与类声明分开的文件中。

    11.2.4 成员访问控制 Public or Private?

    不必在类声明中使用关键字private,因为这是类对象的默认访问控制。

    class World
    {
            float mass; // private by default
            char name[20]; // private by default
        public:
            void tellall(void);
            ...
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    类和结构体的区别?

    唯一的区别是结构体的默认访问类型是public,而类的默认类型是private。c++程序员通常使用类来实现类描述,同时将结构体限制为表示纯数据对象(通常称为普通的老式数据结构,或POD结构)。

    11.2.5 实现类成员函数

    类成员函数与普通函数的区别:

    • 1.定义类成员函数时,使用作用域解析运算符(::)来标识函数所属的类;
    • 2.类方法可以访问类的private组件

    类作用域:

    //这两个类成员函数相互不干扰
    void Stock::update(double price);
    void Buffoon::update()
    
    • 1
    • 2
    • 3

    一个类成员函数可以直接使用同类下的其他成员函数而无需::符号(在类定义或成员函数定义中都可),但是其他地方必须使用class::符号,eg:Stock::update()。

    11.2.6 内联方法

    定义位于类声明中的函数都将自动成为内联函数。

    下面这两种定义是等价的:

    class Stock // class declaration
    {
    private:
    	...
    	void set_tot() { total_val = shares * share_val; }//是个内联函数
    public:
    	...
    }; // note semicolon at the end
    #endif
    
    class Stock
    {
    private:
    	...
    	void set_tot(); // definition kept separate
    public:
    	...
    };
    inline void Stock::set_tot() // use inline in definition
    {
    	total_val = shares * share_val;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    11.2.7 方法使用哪个对象?

    调用成员函数时,它将使用被用来调用它的对象的数据成员。

    下面这两个函数调用使用的是各自的shares and share_val:

    Stock kate, joe;
    kate.show(); // the kate object calls the member function
    joe.show(); // the joe object calls the member function
    
    • 1
    • 2
    • 3

    所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,及每种方法只有一个副本。

    在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。见下图。

    img

    11.2.8 使用类

    C++的目标是使得使用类与使用基本的内置类型(如int和char)尽可能相同。

    基本上基本类型能做的自定义的类也能做。

  • 相关阅读:
    java计算机毕业设计房屋租赁网站MyBatis+系统+LW文档+源码+调试部署
    为什么感觉中国人月薪过万已经很普遍了?
    Java 漏洞扫描工具之 IDE 插件中墙裂建议修复的漏洞
    多线程之JUC队列与数组
    多模态大模型的应用探索:多样场景下的创新实践
    MySQL索引
    NumPy 泊松分布模拟与 Seaborn 可视化技巧
    Rust教程6:并发编程和线程通信
    基于jeecgboot的flowable流程支持online表单(二)
    鸢尾花数据可视化
  • 原文地址:https://blog.csdn.net/weixin_44410704/article/details/127867530