![](https://img-blog.csdnimg.cn/direct/82f18de63c444e1e89913ed5d767ac49.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++面向对象编程
文章平均质量分 91
欢迎来到C++编程专栏!在这里,我们将系统讲解C++编程语言,从基础语法到高级特性,涵盖面向对象编程、模板编程和标准模板库(STL)等。无论您是初学者还是有一定基础的开发者,都能在这里找到适合的内容。加入我们,探索C++的奥妙,成为更优秀的程序员!
未来可期,静待花开~
刚入行的技术猿一枚,记录学习过程中重要技术理论,谢谢关注,欢迎交流分享!
展开
-
C++基础(一):前言
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代(1980年代), 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。原创 2024-06-27 21:28:22 · 623 阅读 · 0 评论 -
C++基础(二):C++入门(一)
在学习C++的输入和输出之前,我们简单复习与输入输出相关的知识点,扩充知识体系。学习过C语言,我们知道,要进行输入和输出,需要引入标准头文件:#include ,因为里面有三个标准设备:标准输入流:stdin、标准输出流:stdout、标准错误流:stderr,与此C++进行输入输出,需要引入标准头文件: #include 和使用对应的命名空间using namespace std;原创 2024-07-02 13:24:05 · 1043 阅读 · 0 评论 -
C++基础(三):C++入门(二)
模板参数表>尖括号中不能为空,参数可以有多个,用逗号分开。模板参数主要是模板类型参数。模板类型参数代表一种类型,由关键字class 或typename 后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个潜在的内置或用户设计的类型。a : b;编译阶段,编译器根据实参类型自动的生成如下函数代码:这也叫模板实参推演,其本质上还是函数重载,由编译器自动生成代码。a : b;a : b;a : b;原创 2024-07-02 20:15:55 · 975 阅读 · 0 评论 -
C++基础(四):C++入门(三)
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98成为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于 C++98/03,原创 2024-07-03 09:13:08 · 1201 阅读 · 0 评论 -
C++基础(五):类和对象(上)
类的定义方式如下,可以看到,它的定义方式和结构体定义非常像,把typedef关键字换成了class,并且加入了成员函数。// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式有两种,原创 2024-07-04 17:01:35 · 1096 阅读 · 0 评论 -
C++基础(六):类和对象(中-1)
1、一般类的成员变量设计成私有的2、构造函数,我们一般需要自己实现,必须要写,常用的是:全缺省的默认构造函数3、析构函数,需不需要实现,取决于我们是否需要有资源清理,没有资源清理,就不需要写,有资源清理(动态内存),就必须写!4、拷贝构造函数和赋值重载运算符,需不需要实现也是看情况,因为它存在浅拷贝的问题,类中如果没有涉及资源申请/资源管理时,是否写都可以;一旦涉及到资源申请/资源管理时,则拷贝构造函数是一定要写的,否则就是浅拷贝。原创 2024-07-05 16:35:07 · 796 阅读 · 0 评论 -
C++基础(七):类和对象(中-2)
1. const对象可以调用非const成员函数吗?不可以。const对象只能调用const成员函数,因为const对象不能被修改,而非const成员函数可能会修改对象的状态。public:// 修改对象状态的代码// 不修改对象状态的代码int main()// 可以调用// 编译错误return 0;2. 非const对象可以调用const成员函数吗?可以。非const对象可以调用const成员函数,因为const成员函数保证不会修改对象的状态。原创 2024-07-05 20:58:14 · 1200 阅读 · 0 评论 -
C++基础(八):类和对象 (下)
上一小节,构造函数只有一个参数,那如果是多个参数呢?class Datepublic:Date(int year,int month,int day) //构造函数:多个参数Date(const Date& d) //拷贝构造函数private:int _year;int _month;int _day;int main()//这里编译是无法通过的(C++98)!C++11支持下面这种写法!//编译可以通过!原创 2024-07-06 17:24:02 · 1273 阅读 · 0 评论 -
C++基础(九):C/C++内存管理
既然C语言已经有了malloc和free,new和delete的意义何在?1、对于上面的内置类型,他们的效果是一样的;2、对于申请自定义类型,他们的效果就不一样了。int main()new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// C。原创 2024-07-06 20:03:36 · 813 阅读 · 0 评论 -
C++基础(十):模板初阶
class 类模板名// 类内成员定义。原创 2024-07-07 09:29:36 · 725 阅读 · 0 评论 -
C++基础(十一):STL简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2024-07-07 09:58:18 · 506 阅读 · 0 评论 -
C++基础(十二):string类
1. string是表示字符串的字符串类,它就是一个自定义类型,可以用它来实例化字符串类对象。2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作成员函数以及描述这个字符串类属性的一些成员变量。3. string在底层实际是:basic_string模板类的别名,typedef basic_string string;4. 不能操作多字节或者变长字符的序列。原创 2024-07-08 22:46:02 · 681 阅读 · 0 评论 -
C++基础(十三):string类模拟实现
这一节我们来实现经典的string类,达到理解的目的。原创 2024-07-10 16:11:04 · 95 阅读 · 0 评论 -
C++基础(十四):vector
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小,为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-07-11 09:11:19 · 1011 阅读 · 0 评论 -
C++基础(十五):list
list是可以在常数范围(时间复杂度)内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2024-07-11 15:00:52 · 804 阅读 · 0 评论 -
C++基础(十六):stack和queue
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。原创 2024-07-11 17:28:54 · 670 阅读 · 0 评论 -
C++基础(十七):模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。即:项目工程中一般将函数的声明或者类的声明放到.h文件,将函数的定义或者类的定义放到.cpp文件中,那么为什么要分离编译?方便查看和维护。模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性。原创 2024-07-11 19:19:09 · 602 阅读 · 0 评论 -
C++基础(十八):继承(重点)
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用。public:protected:// 姓名// 年龄class Student : public Person //学生类继承自Person类protected:int _stuid;原创 2024-07-12 13:18:35 · 803 阅读 · 0 评论 -
C++基础(十九):多态(重点)
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写1、满足多态的条件:跟调用对象的类型无关,跟指向的对象有关,指向哪个对象就调用他的虚函数。2、不满足的多态的条件:跟调用对象的类型有关,调用的类型是谁,调用的就是谁的!原创 2024-07-13 13:36:44 · 1157 阅读 · 0 评论 -
C++基础(二十):常见C++11的新特性
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2024-07-14 23:13:04 · 801 阅读 · 0 评论 -
C++基础(二十一):异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家 随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。原创 2024-07-15 09:46:50 · 685 阅读 · 0 评论 -
C++基础(二十二):智能指针
内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.原创 2024-07-15 19:31:59 · 964 阅读 · 0 评论 -
C++基础(二十三):特殊类的设计
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打 仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后 来孙子就总结出了《孙子兵法》。孙子兵法也是类似。原创 2024-07-16 11:12:16 · 805 阅读 · 0 评论 -
C++基础(二十四):C++的类型转换
C++ 的类型转换(Type Casting)用于在不同类型之间转换数据。主要有四种方式:隐式转换由编译器自动完成;C 风格转换使用语法,功能强大但不安全;用于相关类型之间的显式转换,较为安全;主要用于多态类型的安全转换;const_cast用于修改对象的常量性;进行低级别的位模式转换,需谨慎使用。通过这些转换,开发者可以灵活处理不同类型的数据。原创 2024-07-16 12:38:23 · 1019 阅读 · 0 评论