博客
关于我
C++学习笔记八
阅读量:282 次
发布时间:2019-03-01

本文共 1481 字,大约阅读时间需要 4 分钟。

C++学习笔记八

虚函数

虚函数是面向对象编程中多态的基础,通过它,可以让同一函数在不同子类中有不同的行为。以下是一个简单的例子:

#include 
using namespace std;class Parent {public: void func() { cout << "Parent" << endl; }};class Child : public Parent {public: void func() { cout << "Child" << endl; }};int main() { Child c; c.func(); // 输出 "Child" Parent *p = &c; p->func(); // 输出 "Parent" return 0;}

早绑定与静态多态

在上述代码中,函数调用结果是"ChildParent"。这是由于函数调用时已经确定了调用哪个版本的函数,这种现象称为早绑定静态多态

使虚函数生效

如果在Parent类中定义func为虚函数:

class Parent {public:    virtual void func() {        cout << "Parent" << endl;    }};

则输出结果会变为"ChildChild"。这表明虚函数的调用取决于对象的类型,而不是指针的指向。这种方式是多态的常规使用方式。

纯虚函数

如果子类没有实现纯虚函数:

class Parent {public:    virtual void func() = 0;};

这意味着编译器知道函数没有实现,但可以在子类中提供实现。这种情况下,编译器不会生成函数的代码,仅进行符号链接。

顺序容器

C++提供了多种顺序容器,包括vectorlistdeque。这些容器都支持随机访问和双向迭代。以下是它们的主要区别:

  • vector:动态数组,元素可以通过索引快速访问,插入和删除操作的时间复杂度较低。
  • list:双向链表,插入和删除操作的时间复杂度较高,适合频繁修改数据的场景。
  • deque:双端队列,支持在两个端点快速插入和删除元素。

容器适配器

C++还提供了以下容器适配器:

  • stack:栈结构,通常与vectorarray配合使用。
  • queue:队列结构,支持先进先出(FIFO)的操作。
  • priority_queue:优先队列,支持按键排序的元素提取。

这些容器适配器提供了与底层容器不同的接口,通常用于简化常见操作。

容器的初始化

容器可以通过迭代器、c(n)c(n, t)初始化。迭代器适用于所有容器,而c(n, t)仅适用于顺序容器。例如:

vector
vec = c(5, 10); // 初始化为五个10vector
vec = cbegin(vec), viter(vec.end());

容器内元素的约束

容器的元素类型必须支持赋值运算,并且对象必须可以复制。引用类型不支持赋值运算,因此不能存储在容器中。

迭代器

在C++中,迭代器是访问容器元素的重要工具。常见的迭代器操作包括:*it, it++, it--, it == end, it != begin等。

使迭代器失效的操作

某些容器操作会改变容器的内涵,例如erase函数会删除元素,导致指向这些元素的迭代器失效。因此,在进行这些操作时,应小心使用迭代器。

转载地址:http://pfao.baihongyu.com/

你可能感兴趣的文章
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>