CPP
文章平均质量分 87
课内笔记,也许后面会有些开发。
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
C++标准模板库(STL)常见容器与算法介绍
文章目录`vector`vector的声明vector的元素访问常用函数`string`定义string的元素访问常用函数vectorvector,向量,是一种变长数组。长度根据需要变化而自动改变的数组。头文件#include <vector>vector的声明vector<typename> name;typename可以是任何基本类型,int ,double char结构体类型,类类型。甚至还可以是STL标准容器,如vector,queue,set,map等等原创 2021-03-04 18:26:32 · 201 阅读 · 0 评论 -
C++ Primer Plus读书笔记—— 8.5 函数模板
用途函数模板允许以泛型(而不是具体的类型)来编写程序,其中的泛型可以用具体的类型来替代。语法创建函数模板template <typename T>……template <class T>void f(T a,T b)void f(T a[],T b[],int n) //模板函数里面的函数参数不一定都是泛型重载的模板简单来说,和常规函数的重载类似。显式具体化为特定类型提供具体化的模板。举书上的例子吧。比如struct Job{string name原创 2021-03-04 18:25:09 · 83 阅读 · 0 评论 -
C++生成全排列的库函数 next_permutation
#include <iostream>#include <algorithm>using namespace std;int main(){ int n ; int a[10000]; while(cin>>n && n){ for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); do { for(in原创 2020-09-29 14:51:09 · 234 阅读 · 0 评论 -
c++ 模板类继承-成员变量不可访问的问题
在编写代码的时候,发现一个现象:模板类从一个父模板类继承后,不能访问其内部的protected成员变量,提示:not declare;普通类从一个父模板类继承后,可以访问其内部的protected成员变量,可正常编译和使用;对于第1个现象,如果想正常使用需要加上父模板类的域名;模板类继承模板类#include <iostream>namespace test{template <typename T>class Base{public: void Sho转载 2020-09-26 23:11:35 · 2281 阅读 · 2 评论 -
C++ Primer Plus读书笔记 ——13.1.4 派生类和基类的特殊关系 13.3 多态公有继承 13.4 静态联编和动态联编
在公有派生下派生类与基类的关系如果是公有派生,那么派生类一个就是一种特殊的基类,或者说派生类拥有基类的所有方法,所以,派生类对象可以使用基类的方法,除非方法是私有的。基类指针或引用可以在不显式转化为派生类指针或引用的情况下直接指向派生类对象。但注意,上述规则在private派生、protected派生下不适用。多态的实现在Java中,这种多态是默认行为,但是在c++的世界里,必须依赖于虚函数。如何使用virtual关键字class Base{ virtual …… // ..原创 2020-09-24 20:05:10 · 152 阅读 · 0 评论 -
C++ Primer Plus读书笔记 ——13.8 类的设计回顾
默认构造函数复制构造函数原型:Class_Name(const Class_Name &);使用场景:返回类的对象;传对象做函数参数;将新对象初始化为一个同类对象;生成临时对象默认的复制构造函数在有些情况下是不合适的:需要深拷贝;需要更改静态变量。赋值运算符原型:Class_Name& Class_Name::operator=(const Class_Name&);用于处理同类对象的赋值。当然还可以有其他类型然后赋值给另一个类型的对象。同样在需要深拷..原创 2020-09-20 15:07:45 · 81 阅读 · 0 评论 -
C++ Primer Plus读书笔记 —— 12.4 返回对象的说明
文章目录返回指向const对象的引用返回指向非const对象的引用返回对象返回const对象返回指向const对象的引用如果返回的对象在调用函数之前就已经存在,那么那么就可以返回引用(无需调用复制狗构造函数),而并不是返回对象。降低了时间和空间开销。但是因为是指向const 对象的引用,所以拿到这个引用的时候,就无法修改这个对象了。所以这种情况常常返回一个常对象的引用(只读不可写)。返回指向非const对象的引用和上面的情况一样的是都是引用,但是不用const修饰。所以可以修改。两个经典的例原创 2020-09-02 11:21:48 · 84 阅读 · 0 评论 -
C++ Primer Plus读书笔记 —— 12 .1.2.3 类和动态内存管理
静态成员变量的声明静态类成员变量是独立于类的对象而存储的。声明时,须指明类型,使用作用域运算符,不使用关键字static。例如:int Class_Name::x = 1;其次,初始化是在实现文件中,而不是在头文件中,否则可能会多次初始化。一种例外情况是,静态数据成员为const类型或枚举类型。...原创 2020-09-01 19:49:36 · 81 阅读 · 0 评论 -
C++ Primer Plus读书笔记—— 11.6 类的自动转换和强制类型转换
其他类型转换为类类型如果类的构造函数只接受唯一一个参数,那么c++允许此参数的类型转换为类类型。举例:// example1class A{ int x;public: A(int x):x(x){}};A a = 1;// example2class A{ int x; double y; public: A(int x,double y = 1.0):x(x),y(y){}};A a = 1;必须只接受一个参数,或者有多个参数同时除原创 2020-08-27 21:41:33 · 154 阅读 · 0 评论 -
C++ Primer Plus读书笔记—— 13.2 继承:is-a关系
这部分内容和c++本身并无太大关系。主要探讨了面向对象设计的几种模式。is-a往往用继承表达这种关系,派生类继承基类的所有特性。这种关系往往表达成is-a-kind-of,也就是子类的对象往往是一种父类的对象。举个例子,苹果是一种水果。has-a如果说一种对象包含了一整个其他的对象,或者说一种对象由其他几种对象组成。这个时候并不适合用继承(派生)来表达这种关系,而是适合使用组合。也就是说,应该将这种对象作为另一种数据成员。比如,午餐由水果、蔬菜、肉构成。use-a有的时候,一个对象.原创 2020-08-26 23:04:19 · 227 阅读 · 0 评论 -
C++ Primer Plus读书笔记 ——— 11.3 友元 15.1 友元
文章目录友元的角色友元的分类友元函数的声明与定义使用友元类友元成员函数互为友元共同的友元友元的角色根据OOP的数据隐藏原则, 一个类的私有数据只有通过给定的公有接口才能去访问。最常用的公有接口就是类的公共成员方法。但是这种访问方式局限性太多,在很多时候不适合解决特定的问题。于是友元提供了另一种共有接口。赋予一个类外的函数和这个类的成员函数相同的访问权限。思考:使用友元是否破坏了OOP的数据隐藏规则?根据前面的分析,发现并没有,友元只是提供了另一种访问类数据的接口罢了,它的地位和公共的成员函数原创 2020-08-21 21:09:34 · 337 阅读 · 0 评论 -
C++ Primer Plus读书笔记—— 10.3 类的构造函数与析构函数
关于C++的构造函数的基本知识就不细讲了,可以看看之前博主发的博客。使用构造函数class A{};A a;A a(1,2);//隐式 1A a = A(1,2);//显式 2 A *pa = new A(2,3); //动态分配内存 ,也是隐式的 3一个注意点隐式调用默认构造函数时,不要使用括号。所谓隐式地调用,就是上面的1 、3 种情况A aa(); //这没有调用A的默认构造函数,实际上它声明了一个返回A对象的函数A *pa = new A(); // 不过.原创 2020-08-19 21:34:43 · 117 阅读 · 0 评论 -
C++ Primer Plus读书笔记—— 7.10 函数指针
获取函数的地址函数名即为函数的地址,在传参的时候注意不要加上括号和参数。原创 2020-08-19 02:12:23 · 106 阅读 · 0 评论 -
大一CPP期末复习大纲目录
前言:这是大一的cpp期末复习笔记,主要记录了看老师发的ppt的体会,以及写了一些小demo。PO指针(1)OO类与对象(1)原创 2020-04-28 01:23:41 · 271 阅读 · 0 评论 -
CPP函数
a原创 2020-05-16 07:21:02 · 1849 阅读 · 0 评论 -
CPP数组与字符串
s原创 2020-05-10 21:44:15 · 1329 阅读 · 0 评论 -
CPP指针(1)
指针指针的概念地址操作系统根据程序中定义变量的类型,给变量分配一定的内存空间。字符型占1个字节,整型数占4个字节…。内存区的每个字节都有编号,称之为地址。变量的指针变量的指针就是变量的地址,当变量定义后,其指针(地址)是一常量。&取地址运算符*用途①用于声明指针变量的时候。用途②用于间接访问变量。指针变量指针变量是一个变量,专门用来存放另...原创 2020-04-28 01:19:10 · 695 阅读 · 0 评论 -
CPP指针(2)
文章目录指针(2)函数的指针返回指针的函数指针数组指针的指针`new`和`delete``const`指针`void* `指针引用指针(2)函数的指针函数在编译时被分配给一个入口地址。这个入口地址称为函数的地址,也是函数的指针。函数名代表函数的入口地址int max(int x,int y){ return x>y?x:y;}int min(int x,int y){ return x<y?x:y;}int (*p)(int,int);p = max;p = min原创 2020-08-18 19:57:16 · 386 阅读 · 0 评论 -
CPP自定义类型
自定义类型C++提供了许多基本的数据类型(如int、 float、double、 char等)供用户使用。但是程序需要处理的问题往往比较复杂,已有的数据类型不能满足使用要求。C++允许用户根据需要自己声明一些类型,例如数组就是用户自己声明的数据类型。此外,用户可以自己声明的类型还有结构体(structure)类型、共用体(union)类型、枚举(enumeration)类型、类(class)...原创 2020-05-09 20:05:02 · 888 阅读 · 0 评论 -
CPP类与对象(1)
文章目录08类与对象类的定义类与结构体类与对象类的成员函数对象做参数09类与对象的使用构造函数析构函数对象数组对象指针this指针const数据保护08类与对象类的定义注意一些符号。class Student{private: int age; void setAge(int);protected: double height; void setHei...原创 2020-04-28 00:36:11 · 437 阅读 · 0 评论 -
CPP类和对象 (2)
文章目录类和对象(2)对象的赋值(=)复制构造函数静态成员(Static)成员Friend函数与类函数模板类和对象(2)对象的赋值(=)类型相同的对象可以相互赋值,相当于类中的数据成员相互赋值(memberwise copy)。这种赋值与对象数据成员的访问权限无关。democlass A{ int x;public: A(int x):x(x){} void ...原创 2020-05-02 19:07:49 · 324 阅读 · 0 评论 -
CPP继承与派生
文章目录类的继承与派生类的组合类的继承单继承多继承派生类的构造函数和析构函数类的继承与派生类的组合在一个类中以另一个类的对象作为数据成员(子对象),称为类的组合。组合是横向的。类的继承继承是在一个已存在的类的基础上,建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”。新建立的类称为“派生类(derived class)”或“子类...原创 2020-05-12 21:15:33 · 888 阅读 · 0 评论 -
CPP运算符重载
文章目录函数的重载运算符重载运算符重载的作用运算符重载的方式典型运算符的重载转换构造函数类型转换函数函数的重载1.定义的重载函数必须具有不同的参数个数,或不同的参数类型。编译系统根据不同的参数去调用不同的重载函数,实现不同的功能。2、仅返回值不同时,不能定义为重载函数。运算符重载函数重载是指完成不同功能的函数可以具有相同的函数名。C++编译器根据函数的实参确定应该调用哪一个函数。运算...原创 2020-05-04 01:53:37 · 2667 阅读 · 0 评论 -
CPP多态性与虚函数
文章目录多态性与虚函数面向对象程序设计中的多态性派生类与基类对象之间的赋值虚函数虚析构函数纯虚函数(抽象类)虚函数与虚基类派生类中重定义基类中的重载函数虚函数动态绑定的实现原理多态性与虚函数面向对象程序设计中的多态性多态性(polymorphism)调用同一个函数名,根据需要实现不同的功能。编译时的多态性:静态多态(函数重载、运算符重载)运行时的多态性:动态多态(虚函数)函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时就能决定调用的是哪个函数。静态多态性又称编译时的多态性。静态原创 2020-05-14 01:55:59 · 1166 阅读 · 0 评论 -
C++ 自由存储区是否等价于堆?
文章目录“free store” VS “heap”问题的来源结论“free store” VS “heap”当我问你C++的内存布局时,你大概会回答:“在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。如果我接着问你自由存储区与堆有什么区别,你或许这样回答:“malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。”这样听起来似乎也没错,但如果我接着问:自由存储区与堆是两块不同的内存区域吗?它转载 2020-09-07 15:44:28 · 104 阅读 · 0 评论 -
关于c++显示调用析构函数的陷阱
一、文章来由现在在写一个项目,需要用到多叉树存储结构,但是在某个时候,我需要销毁这棵树,这意味着如果我新建了一个树对象,我很可能在某处希望将这个对象的声明周期终结,自然会想到显示调用析构函数,但是就扯出来这么大个陷阱。二、原因在了解为什么不要轻易显示调用析构函数之前,先来看看预备知识。为了理解这个问题,我们必须首先弄明白“堆”和“栈”的概念。1)堆区(heap) —— 一般由程序员分配释...翻译 2020-04-28 23:03:23 · 215 阅读 · 0 评论 -
c++分割字符串
vector<string> split(const string &s){ vector<string> res; char* p; p = strtok((char*)s.c_str(),"."); while(p){ res.push_back(p); p = strtok(nullptr,"."); } return res;}原创 2020-07-02 22:20:57 · 123 阅读 · 0 评论