随笔分类 -  C++

记录自己C++学习过程
摘要:C++ STL全排列 next_permutation 用法 全排列是排列数学中常用的算法之一,而C++ STL中就提供了内置的全排列函数 next_permutation. 方法原型主要有以下两种(均以经过个人简化) template<class Iterator> bool next_permu 阅读全文
posted @ 2020-09-05 16:12 scyq 阅读(1013) 评论(0) 推荐(0)
摘要:C++中利用sort进行排序 编写C++经常需要使用sort进行排序,有可能是简单的数组、数字vector或者是复杂一点的存放对象的vector。 C++为了满足用户的需求,在algorithm里面封装了sort泛型算法。所以使用时,必须#include < algorithm> template 阅读全文
posted @ 2020-06-06 01:05 scyq 阅读(1444) 评论(0) 推荐(0)
摘要:C++ 虚继承和虚继承 虚继承是在多继承中为了解决冲突而技术。学术一点来说,是指一个指定的基类,在继承体系结构中,将其成员数据实例共享给也从这个基类直接或间接派生的其他类。 虚继承非常有用,可以避免多继承的歧义和多重拷贝。 为什么需要虚继承? 考虑有如下继承结构。 B和C继承A,D多继承B、C,我们 阅读全文
posted @ 2020-06-03 22:03 scyq 阅读(769) 评论(0) 推荐(0)
摘要:C++ 动态联编和静态联编 ==本文较长,非常详细,主要关于动态联编、静态联编和虚函数。建议前置阅读== "如何理解基类和派生类的关系" 当你写了一个函数,程序运行时,编译器会如何执行你的函数呢? 什么是联编? 你会认为这个问题很弱智,代码怎么写的编译器就怎么执行呗?这对于C语言来说是成立的,因为每 阅读全文
posted @ 2020-04-15 23:45 scyq 阅读(4513) 评论(0) 推荐(0)
摘要:如何理解基类和派生类的关系 在开讲之前,我们先看基类和派生类的定义。为了方便显示,我把方法的声明和定义写在了一起。 基类 派生类 诶,看到这里有人问了。我这个指针和引用不是都针对的是派生类吗?为什么会输出"I am a person"呢?这明明是基类的方法啊?(这里为了举例,特地没有采用虚函数的方式 阅读全文
posted @ 2020-03-28 20:34 scyq 阅读(2685) 评论(0) 推荐(1)
摘要:C++拷贝构造函数详解 简介 拷贝构造函数是C++独有的 一种特殊的构造函数 ,以同型对象初始化自我对象。 拷贝构造函数是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用拷贝构造函数。当该类型的对象传递 阅读全文
posted @ 2020-03-24 19:27 scyq 阅读(6008) 评论(0) 推荐(1)
摘要:继承引出的对构造方法的要求 构造方法是类的一个特殊成员,它会在实例化对象时被自动调用。 我们无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。 因此构造函数被用来创建对象,而不能通过对象来调用。 那么我们都知道继承,继承由于派生类继承基类内成员(无法继承构造方法,继承了私有成 阅读全文
posted @ 2020-03-22 14:08 scyq 阅读(193) 评论(0) 推荐(0)
摘要:C++判断输入是否为double 之前写过了Python如何判断输入字符串是否为数字,但是Python是弱类型语言,相比之下C++这种强类型语言判定难度更大。 "Python判断输入字符串是否为数字的方法" 例如,我要把不断输入的字符串中数字都转为double类型,别的都保存为字符串。那么我接收输入 阅读全文
posted @ 2020-03-20 22:20 scyq 阅读(2669) 评论(3) 推荐(0)
摘要:C++头文件中的模板类 这已经是我的第三篇关于头文件的博客了,没想到我还是踩了个巨坑。 大家都知道要在头文件里声明类成员,在源文件中实现。 但是今天写数据结构作业,在头文件(Stack.h)定义了一个栈的模板类,在源文件(Stack.cpp)实现了相应的功能。但是编译死活不过,怎么改怎么过不了。 结 阅读全文
posted @ 2020-03-16 21:52 scyq 阅读(1414) 评论(0) 推荐(0)
摘要:C++ 同类不同对象的互相访问 C++ 允许同一个类的不同对象(实例)访问彼此的私有成员。 示例 在Person类成员函数 calGen()中,我们 明显地调用了另一个Person类的私有成员_age 。而这样做是不会有任何问题的。 这体现了OOP的一种哲学, 封装是针对类而不是对象 ,相同类之间所 阅读全文
posted @ 2020-03-06 21:56 scyq 阅读(1380) 评论(0) 推荐(0)
摘要:const不同位置带来的区别 今天同学问我数据结构时,我对以下代码懵了一下: 这是一个单链表的节点定义,我第五行,第一个构造函数的第二个参数有点懵。 我当时寻思着,把这个指针定义为const类型,那不永远都指向空了吗?那我为什么后面还能改变呢?查询之后发现是我对 const不同位置的作用 不了解。 阅读全文
posted @ 2020-03-05 11:40 scyq 阅读(1146) 评论(0) 推荐(2)
摘要:C++动态内存new和delete C++动态内存是C++灵活、炫酷的一种操作。学好它,能让自己编程逼格上一个level。 在学习动态内存之前,我们先要了解C++是怎么划分内存的: 栈: 在函数内部声明的所有变量都将占用栈内存。栈是由编译器自动分配和释放的,由系统分配。 堆: 这是程序中未使用的内存 阅读全文
posted @ 2020-03-03 22:15 scyq 阅读(898) 评论(0) 推荐(0)
摘要:C++头文件应该干的事情 最近在写自己项目的时候,头文件老是编译错误,后来发现还是对头文件掌握不牢。 头文件应该干什么? 所谓的头文件,其实它的内容跟 .cpp 文件中的内容是一样的,都是 C++ 的源代码。 但头文件不用被编译。 我们把所有的函数声明全部放进一个头文件中,当某一个 .cpp 源文件 阅读全文
posted @ 2020-03-02 19:24 scyq 阅读(211) 评论(0) 推荐(1)
摘要:浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是 值传递、指针传递和引用传递。 下面通过讲解和实例来说明三种方式的区别。 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专用的局部变量,意味着函数接收到的是实参的副本,如果形参的值在函数内部被改变, 对实参是没有影响的 阅读全文
posted @ 2020-02-27 15:43 scyq 阅读(5411) 评论(0) 推荐(1)
摘要:C++ delete报错 今天写了如下代码 编译没有报错,但是运行的时候报错了。原因是delete语句。 出错现象: 执行delete语句时,程序卡死。将delete注释掉,程序运行正常,但是发生了内存泄漏。 原因: p作为指向堆内存的指针,指向的是数组的首地址。而我更改了p的地址,如代码中的p++ 阅读全文
posted @ 2020-02-17 13:39 scyq 阅读(1802) 评论(0) 推荐(0)
摘要:C++模板心得 我开始学模板的时候一脸懵逼,真的看不懂模板是怎么作用的。因为大多数人的代码把模板声明和函数、类的声明分行写,让我以为模板的作用是全局的,实际上应该像如下理解。 函数模板 模板类 template 和 template 没有区别(除了在套娃的时候) 在头文件中定义模板类时,在实现时要写 阅读全文
posted @ 2020-02-16 20:56 scyq 阅读(364) 评论(0) 推荐(0)
摘要:C++不被继承的内容 派生类会继承基类所有的方法和变量, 除了 : 构造函数,析构函数 重载运算符 友元函数 注意,私有成员是被继承了的,只是无法访问。我们可以通过sizeof判断出来。下面附一张清晰的图 阅读全文
posted @ 2020-02-12 13:08 scyq 阅读(250) 评论(0) 推荐(0)
摘要:区分C++和Java的this 今天早上写C++程序的时候,我习惯性地在程序中写了如下代码 编译器给我无情地报错了。后来想想,发现是自己基础不牢的问题,拍拍脑袋写下来了这篇博文。 上面的写法,Java程序员肯定不陌生。 this 关键字用于在类的内部访问内部成员,调用内部对象。C++同样也用 thi 阅读全文
posted @ 2020-02-12 12:52 scyq 阅读(924) 评论(0) 推荐(1)
摘要:C++类的成员初始化 学到一个类的成员初始化,目前已知的用途是给类内部的const类型变量进行赋值。 首先,如果像这么干,编译器会报错。 这样做会报错的原因是,构造器内部的代码只有在类被实例化时才会运行。所以我先定义了一个const类型的整型数,这个数字原则上是不可以改变的,这是不可以被改变的,所以 阅读全文
posted @ 2020-02-11 22:03 scyq 阅读(1259) 评论(0) 推荐(0)
摘要:C++友元函数和友元类 今天学到一个特别有意思的东西,甚至是C++独有的东西,叫做 友元函数 。类的友元函数是定义在类外部,但有权访问类的所有 私有(private) 成员和 保护(protected) 成员。尽管友元函数的原型有在类的定义中出现过, 但是友元函数并不是成员函数。 友元可以是一个函数 阅读全文
posted @ 2020-02-11 21:49 scyq 阅读(350) 评论(0) 推荐(0)