类学习之进修

本文基于之前的类和对象学习,进一步拓展学习。着重介绍了STL标准模板库,包括其容器类别、操作及迭代器概念,还提及常用的vector和map容器。同时阐述了面向对象方法的核心概念,如封装、继承和多态性,以及对象初始化、运算符重载等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类学习之进修
在之前学习类的基础之上,在能够对类的学习有初步的认识之后,进行了进一步的拓展与联系,基础知识的掌握才是,想要进步的真正阶梯。
在之前的类和对象学习中,对一些概念,如数据抽象、封装、struct、this指针、访问器修改器、友元、static成员、析构和构造函数都有相对的了解,在这一阶段的学习之后,这些概念得到运用并且能够在自己手中得到“升华”。
这一阶段,非常重要的就是对STL(Standard Template Libarary)的学习。STL是标准模板库的核心,深刻影响了标准程序库的整体结构。STL由一些可适应不同需求的集合类,以及在这些数据集合上操作的算法构成。STL容器类别有两种:
序列式容器-排列次序取决于插入时机和位置:有vector/deque/list。关联式容器-排列顺序取决于特定准则:有set和map。所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指针。所有元素都形成一个次序,可以按相同的次序一次或多次遍历(在STL容器内访问全部元素且仅一次)每个元素。对于STL容器的一些操作。
1.与大小相关的操作—size()-返回当前容器的元素数量,empty()-判断容器是否为空,max_size()-返回容器能容纳的最大元素数。
2.迭代器相关的操作—begin()-返回一个迭代器,指向第一个元素,end()-返回一个迭代器,指向最后一个元素之后。
3.元素操作—insert(a,b)-将元素b的拷贝安插于迭代器a所指的位置,erase(begin,end)-移除[begin,end]区间内的所有元素,clear()-移除所有元素。
对容器来言又引出了新的概念—迭代器:迭代器:iterator
1.可遍历STL容器内全部或部分元素的对象
2.指出容器中的一个特定位置
3.迭代器的基本操作*,++,=。
在平时的编程中最常用的是vector和map
vector的元素可以是任意类型T,但必须具备赋值和拷贝能力
必须包含的头文件#include
vector支持随机存取
vector的大小(size)和容量(capacity)
1.size返回实际元素个数,
2.capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,需要重新配置内部存储器。
map/multimap使用平衡二叉树管理元素
元素包含两部分(key,value),key和value可以是任意类型
必须包含的头文件#include
根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢
不能直接改变元素的key,可以通过operator []直接存取元素值
map中不允许key相同的元素,multimap允许key相同的元素
步入正题,这段时间主要学习了面向对象方法的核心概念是封装、继承和多态性。C++语言中提供了数据抽象、继承、和动态绑定机制支持面向对象的程序设计。以类和对象作为程序的基本构造块,利用各种关系组织类和对象,可以解决更复杂的问题。组合与继承是复用已有类的两种重要途径,通过这两种途径都可以在已有类的基础上建立新类。多态性是以封装和继承为基础的一项强大的机制。多态性提供了接口与实现之间根据类型信息进一步解耦,从而在很大程度上改善了代码的结构和可读性,也是程序更具可扩展性。C++语言定义了大量的运算符,运算符重载提供了一种语法上的方便,用户可以为自己的类型定义运算符函数,并通过运算符对类对象进行操作。
(1)对象的初始化
C++定义了几种不同的初始化形式,对于类类型的对象来说,不同的初始化形式意味着要调用不同的构造函数

  1. 默认初始化2.直接初始化3.拷贝初始化4.列表初始化
    对象的初始化有几个需要注意的点: 1. 初始值在圆括号“()”中,可以提供多个初始值,根据初始值类型和个数直接调用最匹配的构造函数,赋值和初始化不同,是对已经存在的对象进行的,含义是清除对象当前的值,写入新的值来代替2.在拷贝初始化过程中,编译器可以(但不是必须)跳过拷贝构造函数的调用,直接创建对象
    %如果一个类没有定义任何构造函数,编译器会在需要时自动合成一个默认构造函数,类中一旦定义了构造函数,即使不是默认构造函数,编译器也不再合成。
    (2)运算符重载
    将运算符看作是一种特殊的函数操作数是函数的参数,运算结果是函数的返回值如果运算符被看作是函数,自然也可以像函数一样重载。定义重载运算符和定义普通函数类似,函数名由关键字operator 和其后要定义的运算符组成,返回类型是运算结果的类型。
    非成员运算符函数:一元运算符要提供一个类类型的参数,二元运算符需要提供两个参数分别作为左、右操作数,其中至少一个参数必须是类类型的通常声明为类的友元,以便访问私有数据成员。注意:运算符重载仅仅提供了一种语法上的方便,是以另外一种方式调用函数,只有至少一个操作数是用户自定义类型时,才可能调用重载的运算符,不能滥用运算符重载,只有在能使类的代码更易读、使类对象的操作方式更符合一般习惯时,才重载运算符,运算符重载不会改变内置类型的表达式中运算符的含义。常用的重载运算符,自加自减,用户自定义类型的I/O流输入输出。
    (3)封装和多态性
    被继承的已有类称为基类;继承得到的新类称为派生类;派生类可以再被继承,这样构成的层次结构称为继承层次派生类的生成过程经历了三个步骤:吸收基类成员,改造基类成员,添加派生类新成员。
    多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。重载函数是多态性的一种简单形式。虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。冠以关键字 virtual 的成员函数称为虚函数实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本纯虚函数是一个在基类中说明的虚函数,在基类中没有定义, 要求任何派生类都定义自己的版本,纯虚函数为各派生类提供一个公共界面纯虚函数说明形式:virtual 类型 函数名(参数表)= 0 ;一个具有纯虚函数的基类称为抽象类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值