c++知识点
文章平均质量分 55
1
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
菱形继承
菱形继承概念:两个派生类继承同一个基类,又有某个类同时继承这两个派生类。这种继承被称为菱形继承,或者钻石继承菱形继承的问题:1.羊继承了动物的数据,骆驼也继承了动物的数据,当羊驼使用数据时,就会产生二异性2.羊驼继承动物的数据继承了两份,但是这份数据我们只需要一份虚继承前:#include<iostream>using namespace std;class Animal {public: int age;};class Sheep : public Animal {原创 2021-02-02 11:06:30 · 2366 阅读 · 2 评论 -
多继承的基本语法
多继承:一个子类有俩个或以上的直接父类时称这个继承关系为多继承#include<iostream>using namespace std;//多继承class a {public: int age;};class b {public: int age;};class c :public a, public b{public: int name;};void test(){ cout << "class c的大小为:"<<si原创 2021-03-02 20:58:03 · 735 阅读 · 1 评论 -
常函数与常对象
常函数与常对象常函数1.在成员函数后面加上const后我们称这个函数是常函数2.常函数内不可以修改成员属性3.成员属性声明时加关键字mutable后,依然可以在常函数中修改常对象1.声明对象前加const称该对对象为常对象2.常对象只能调用常函数3.成员属性声明时加关键字mutable后,依然可以在常对象中修改#include<iostream>using namespace std;class wood {public: //常函数 void fun() const原创 2021-01-29 20:05:42 · 416 阅读 · 0 评论 -
多态案例:实现计算机类
#include<iostream>using namespace std;//多态实现计算器class Culculator {public: int num1; int num2; char ch; virtual int GetResult(char ch,int num1,int num2) = 0;};class Add:public Culculator{public: int GetResult(char ch,int num1,int num2) {原创 2021-02-02 18:58:32 · 287 阅读 · 0 评论 -
C++中虚函数多态实现的原理刨析
多态的实现原理刨析虚函数关键字:virtual未写virtual关键字前:#include<iostream>using namespace std;class Animal {public: void speak() { cout << "动物在说话" << endl; }};class Cat :public Animal {public: void speak() { cout << "小猫在说话"原创 2021-02-02 12:15:31 · 305 阅读 · 0 评论 -
纯虚函数和抽象类
纯虚函数和抽象类纯虚函数:只要有一个纯虚函数,就称这个类为抽象类抽象类特点:1.无法实例化对象2.抽象类的子类必须要重写父类的纯虚函数,否则也属于抽象类#include<iostream>using namespace std;class Base {public: //纯虚函数写法: virtual void func() = 0;};class son:public Base {public: void func() { cout << "so原创 2021-02-02 19:09:44 · 331 阅读 · 0 评论 -
虚析构和纯虚析构
虚析构和纯虚析构多态使用时,如果子类有属性开辟到堆区,那么父类指针在释放时无法带调用到子类的析构代码解决方式:将父类的析构函数改为纯虚析构或者虚析构虚析构和纯虚析构的共性:1.可以解决父类指针释放子类对象2.都必须要有具体的函数实现虚析构和纯虚析构的区别:如果是纯虚析构,该类属于抽象类,无法实例化对象#include<iostream>#include<string>using namespace std;class animal {public: //构造原创 2021-02-02 20:47:39 · 217 阅读 · 1 评论 -
向上向下类型转换
原创 2021-03-02 21:49:19 · 206 阅读 · 0 评论 -
重写,重载,重定义
注意:重定义哪里不仅包括成员行为,即函数,也包括成员属性,即变量原创 2021-03-02 21:53:02 · 110 阅读 · 0 评论 -
c++IO库之文件输入输出详细整理,建议赶紧收藏!!!
c++IO库之文件输入输出引言fstream的特有的操作使用文件流读对象用fstream代替iostream&成员函数open和close自动构造和析构文件模式以out模式打开文件会丢失已有数据每次调用open时都会确定文件模式引言头文件fstream定义了三个类型来支持文件IO: ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。这些类型提供的操作与我们之前使用过的对象cin和cout的操作一样。特别是,我们可以用IO运算原创 2021-05-09 22:49:40 · 1589 阅读 · 32 评论 -
c++IO库之string流超详细整理,建议赶紧收藏! ! !
c++IO之string流详细解释初识IO库string流istringstream的使用方法ostringstream的使用方法总结初识IO库string流sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。istringstream从string读取数据,ostringstream向string写入数据,而头文件stringstream既可以从string读数据也可以像string写数据。与fstream原创 2021-05-07 22:16:39 · 3812 阅读 · 30 评论 -
c++stl之lower_bound,upper_bound和equal_range函数的详细介绍!!!
stl常用函数lower_bound,upper_bound和equal_range函数初识注意事项具体使用说明equal_range函数使用注意事项高级用法lower_bound,upper_bound和equal_range函数初识lower_bound.(k)返回一个迭代器,指向第一个值不小于k的元素upper_bound(k)返回一个迭代器,指向第一个值大于k的元素equal_range(k)返回一个迭代器pair,表示值等于k的元素的范围。若k不存在,p原创 2021-05-06 18:32:11 · 2553 阅读 · 40 评论 -
c++之iostream迭代器用法超详细整理!!!
文章目录前言一、istream_iterator和ostream_iterator迭代器简介二、迭代器使用方法和注意事项1.istream_iterator2.ostream_iterator操作总结前言虽然iostream类型不是容器,但标准库定义了可以用于这些IO类型对象的迭代器。一、istream_iterator和ostream_iterator迭代器简介istream_iterator读取输入流,ostream_iterator向一个输入流写数据.这些迭代器将它们对应的流当做一个特定原创 2021-05-04 23:00:16 · 3586 阅读 · 19 评论 -
c++stl之反向迭代器用法及注意事项!!!
反向迭代器1.定义:在容器中从尾元素向首元素反向移动的迭代器对于反向迭代器,递增和递减的含义会颠倒过来递增一个反向迭代器会移动到前一个元素递减一个迭代器会移动到下一个元素注意:除了forward_list容器之外,其他容器都支持反向迭代器2.使用反向迭代器的相关函数rbegin() —指向容器尾元素rend()—指向容器首元素之前一个位置crbegin()crend()下面两个c开头的是反向迭代器的const版本,即不能修改迭代器指向位置的值3.反向迭代器与原创 2021-05-03 08:37:34 · 3382 阅读 · 16 评论 -
C++ explicit关键字详解
C++ explicit关键字详解首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的,跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_ps原创 2021-05-01 17:26:56 · 917 阅读 · 17 评论 -
c++函数指针相关知识点详细总结!!!
函数指针初识函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定。例如://比较两个string对象的长度bool lengthCompare(const string& s1,const string& s2);该函数的类型是bool(const string&,const string&).要想声明一个可以指向该函数的指针,只需要用指针替换函数名即可: //pf指向一个函数,该函数原创 2021-04-29 18:11:19 · 529 阅读 · 13 评论 -
插入迭代器
插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。其实适配器的本质就是实现不变,改变接口。例如容器适配器可以使一个容器vector表现得像一个stack一样,这里的迭代器适配器也是如此。原创 2021-04-24 19:06:18 · 412 阅读 · 0 评论 -
参数绑定---bind函数
引言对于那种只在一两个地方使用的简单操作,lambda表达式是最有用的。如果我们需要在很多地方使用相同的操作,通常应该定义一个函数,而不是多次编写相同的lambda表达式。类似的,如果一个操作需要很多语句才能完成,通常使用函数更好如果lambda的捕获列表为空,通常可以用函数来代替它。但是,对应捕获局部变量的lambda,用函数来替换它就不是那么容易了。例如:我们用在find_if调用中的lambda比较一个string和一个给定大小。 vector<string>原创 2021-04-24 10:56:05 · 1514 阅读 · 15 评论 -
override关键字和final关键字
override关键字派生类如果定义了一个函数与基类中虚函数的名字相同但是形参列表不同,编译器将认为新定义的这个函数与基类中原有的函数是相互独立的。这时,派生类的函数没有覆盖掉基类中的版本。如果我们使用override关键字标记某个函数,但该函数并没有覆盖已存在的虚函数,此时编译器将报错。class B{ virtual void f1(int) const {}; virtual void f2() {}; void f3() {};};class D :B //默认私有继承{原创 2021-04-19 11:41:39 · 233 阅读 · 0 评论 -
stl之emplace函数的使用
c++11新标准引入了三个新成员-------emplace_front,emplace和emplace_back,这些操作构造而不是拷贝元素,因此相比push_back等函数能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。这些操作分别对应push_front,insert和push_back,能够让我们把元素放置在容器头部,一个指定位置之前或容器尾部用法:c.emplace_back(t)在c的尾部创建一个值为t的元素c.emplace_front(t)在c的头部创建一个值.原创 2021-04-19 09:58:05 · 10604 阅读 · 0 评论 -
匿名对象
什么是匿名对象?匿名对象可以理解为是一个临时对象,一般系统自动生成的,如你的函数返回一个对象,这个对象在返回时会生成一个临时对象。匿名对象的生命周期(很重要!!!)#include<iostream>#include<vector>using namespace std;class p{public: p() { num = 100; } p(int n) :num(n) {}; int num;};p test(){//如你的函数返回一个对象,这个原创 2021-04-19 09:19:17 · 340 阅读 · 0 评论 -
函数对象--仿函数
概念:重载调用函数操作符的类,其对象称为函数对象函数对象使用重载()时,行为类似函数调用,也叫仿函数函数对象本质是一个类,不是一个函数函数对象使用:features:1.函数对象在调用时,可以像普通函数一样调用,可以有参数,可以有返回值#include<iostream>using namespace std;#include<string>//函数对象//1.函数对象在调用时,可以像普通函数一样调用,可以有参数,可以有返回值class add {pu原创 2021-02-14 19:04:57 · 264 阅读 · 0 评论 -
stl中的size_type,difference_type和value_type,reference
size_type无符号整数类型,足够保存两个迭代器之间的距离size_type是unsigned类型,表示容器中元素长度或者下标,vector::size_type i = 0;标准库string中的成员类型(member type),以实现标准库类型和机器的无关性,能够存下任意string对象的大小,是一种无符号类型。标准库string的成员函数(size(),查找函数)的返回值类型均为string::size_type。在用下标访问元素时,string使用string::size_ty原创 2021-04-16 17:02:03 · 1242 阅读 · 3 评论 -
Lambda表达式用法超详细整理!!!
Lambda我们可以将其理解为一个未命名的内联函数。与任何函数类似,一个lambda具有一个返回类型,一个参数列表和一个函数体。但与函数不同,lambda可能定义在函数内部。一个lambda表达式具有如下形式:...原创 2021-04-11 21:32:51 · 8285 阅读 · 19 评论 -
C++自定义类的对象对于其私有变量的访问
“在C++的类的作用域内,可以对其私有成员变量进行操作”以下语法规则是不言自明的:在自定义类A的成员函数中,可以对该类的私有成员变量进行赋值等操作,但是在类定义之外所声明的A类的对象aobj是不可以直接访问A类的私有变量的,只有通过在A类的成员函数中开放访问其私有变量的接口,对象aobj才可以对私有变量进行操作。在开发一个类的过程中,我做了如下的定义A类class A{private: int m_para;public: void Func();}void A::Fu原创 2021-04-05 12:31:15 · 845 阅读 · 0 评论 -
函数默认参数
注意:如果某个位置已经有了默认参数,从这个位置往后,从左到右都要有默认值#include<iostream>using namespace std;void test01(int a, int b = 10,int c = 10){ cout << a + b + c << endl;}void test02(int a , int b,int c=10){ cout << a + b << endl;}int mai.原创 2021-02-21 19:16:30 · 287 阅读 · 0 评论 -
函数重载
基本语法作用:函数名可以相同,提高复用性函数重载满足条件:同一个作用域下函数名称相同函数参数类型不同,或者个数不同,或者顺序不同(1)函数参数类型不同#include<iostream>using namespace std;//函数重载//1.作用域:当前测试函数都在全局作用域下//2.函数名称都相同//3.(1)函数参数类型不同void test(){ cout << "test函数调用" << endl;}void tes原创 2021-02-22 08:44:23 · 240 阅读 · 0 评论 -
函数占位参数
注意:函数占位参数可以有默认值,有了默认值,实参就可以不用传入了#include<iostream>using namespace std;void test02(int){ cout << "占位参数" << endl;}int main(){ test02(10); system("pause"); return 0;}#include<iostream>using namespace std;void test0.原创 2021-02-21 19:25:00 · 155 阅读 · 0 评论 -
引用的注意事项
1.引用必须初始化2.引用初始化后不可改变int a=0;int c=10;//当b成为a的别名后,无法再成为变量c的别名int &b=a;b=c;//赋值操作3.#include<iostream>using namespace std;void test(){ int a = 10; int& b = a; int& c = b; int& d = c; cout << d << endl;}int原创 2021-02-22 08:44:31 · 375 阅读 · 0 评论