
C++
韵然CP
用最简单的语言注释程序
展开
-
字符串操作
1.把一个类似“123456789”字符串的数组每一位相加主要操作是char转string#include <iostream>using namespace std;int main(){ string s="123456789"; int sum=0; for(int i=0; i<s.length(); i++) { ...原创 2020-01-10 20:47:41 · 129 阅读 · 0 评论 -
接口和抽象类的联系和区别
一 接口和抽象类的相似性1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。二 接口和抽象类的区别1 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。2 接口里只能定义静态常量,不能定义普通成员变量,抽...转载 2019-03-12 21:39:49 · 198 阅读 · 0 评论 -
C++接口类
在C++中仅含有纯虚函数的类成为接口类,也就是没有数据成员 只有纯虚函数的成员函数例如~class Shape{public: virtual double calcArea()=0; virtual double calcPerimeter()=0;}接口类呢更多的是一种能力或协议~#include<iostream>#include<strin...原创 2019-03-12 21:39:04 · 7407 阅读 · 3 评论 -
C++友元函数
友元函数是可以直接访问类的私有或被保护的成员的非成员函数有两种方式一是定义在类内作为成员函数,另一种是定义在类外成为全局函数定义友元函数的关键字是friend全局函数:#include<iostream>using namespace std;class Time{ friend void printTime(Time &t);public: Ti...原创 2019-03-20 21:32:33 · 310 阅读 · 0 评论 -
图的编码实战-最小生成树之普利姆算法
#include<iostream>#include<stdlib.h>#include<vector>using namespace std;//题目信息/* A / | \ B--F--D \/ \/ C H A B C D E F 0 1 2 3 4 5*/...原创 2019-03-16 21:05:12 · 171 阅读 · 0 评论 -
数据结构之图的遍历代码实现
#include<iostream>#include<stdlib.h>#include<vector>using namespace std;//题目信息/* A / \ B D /\ / \ C FG H \ / E*//* A B C D E F G HA 1 ...原创 2019-03-14 20:57:41 · 4195 阅读 · 0 评论 -
C++纯虚函数
基本定义(来自百科)纯虚函数是一种特殊的虚函数,它的一般格式如下:class <类名>{virtual <类型><函数名>(<参数表>)=0;…};在许多情况下,在基类中不能对虚函数给出有意义的实现(没有函数体),而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数可以让类先具有一个操作...原创 2019-03-11 21:05:44 · 275 阅读 · 0 评论 -
C++虚析构函数
多态也会存在一些问题我们在释放内存的时候 如果释放的是父类的指针 那只会执行父类的析构函数~如果释放的时候子类的指针那既会执行父类的析构函数也会执行子类的析构函数 这样的话子类的空间如果申请了那会内存泄漏~比如上面一篇中在这里面我们就没有释放Circle的空间,如果代码改进加入virtual 执行效果如下virtual如此好用~但是他也会有一些限制1、不能修饰普通函数...原创 2019-03-11 19:27:48 · 997 阅读 · 0 评论 -
c++中vector的用法详解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.用法:1.文件包含:首先在程序开头处加上#include<vector>以包含所需要的类文件vector还有一定...转载 2019-03-15 20:07:21 · 2041 阅读 · 0 评论 -
C++静态多态、动态多态、虚函数
啊~这其实是多态篇的内容 多态呢就是相同对象接受不同消息或不同对象接受相同消息时产生不同的动作我们下面将两个概念 静态多态 动态多态静态多态(早绑定)在我们的类中有两个互为重载的函数的时候,但是参数不一致,在实例化的时候系统能根据我们的参数自动运行相应的函数#include <iostream>using namespace std;class Rectangle...原创 2019-03-11 14:54:17 · 163 阅读 · 0 评论 -
C++类模板
我们的类模板是针对于操作相同但是数据类型不同的情况~需要特别注意的是模板类不能分离编译,也就是.cpp和.h文件里的模板类不能同时编译~我对于模板的理解就是给他的数据类型加上一个可变因素,让他可以根据不同的数据类型生成不同的代码#include <iostream>#include <stdlib.h>using namespace std;temp...原创 2019-03-24 20:50:23 · 141 阅读 · 0 评论 -
C++之RTTI
RTTI:Run-Time Type Identification先来看两个其他的~typeidc++中该函数用于获知一个变量的具体类型。注意事项1、type_id返回一个type_info对象的引用2、如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数3、只能获取对象的的实际类型不能判断指针的dynamic_castdynamic_cast <...原创 2019-03-12 22:04:08 · 338 阅读 · 0 评论 -
C++标准模板库
STL:标准模板库(Standard Template Lib)主要介绍vector,list,mapvector向量:本质是对数组的封装特点:读取是在常数时间内push_pop把数据弹出#include <iostream>#include <stdlib.h>#include <vector>#include <l...原创 2019-03-24 21:53:39 · 292 阅读 · 0 评论 -
C++格式化输出
C++常采用cout数据流来输出字符,当然也可以使用printf语句(要包含stdio.h头文件),但是在C++中还是常采用coutcout可以使用setw(int n)来设置域宽,此操作符作用于后面的操作数,如:cout<<"s"<<setw(8)<<"a"<<setw(4)<<"b"<<endl;1输出结果:...转载 2019-05-31 10:30:41 · 1174 阅读 · 0 评论 -
53. 最大子序和
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。首先当然是暴力法class Solution {...原创 2019-05-16 22:22:21 · 95 阅读 · 0 评论 -
C++函数模板
#include <iostream>#include <stdlib.h>using namespace std;template <typename T>void display(T a){ cout<<a<<endl;}template <typename T,typename S>void disp...原创 2019-03-24 17:28:48 · 98 阅读 · 0 评论 -
C++二元运算符重载
主要演示<<,+,[]运算符的重载这个地方涉及到不同的数据类型~就要讨论一下友元函数重载和成员函数重载的区别~1、+运算符成员函数方式重载#include<iostream>using namespace std;class Coordinate{public: Coordinate(int x,int y) { m_iX=x; m_...原创 2019-03-23 21:20:46 · 990 阅读 · 0 评论 -
C++一元运算符重载
运算符重载是给原有运算符赋予功能新的,实际上就是函数重载一元运算符就是只对一个操作数运算下面通过两个例子来说明-(负号)的重载:1、友元函数重载 2、成员函数重载 ++符号的重载(++也是一元运算符):3、前置++重载 4、后置++重载关键字是:operator1、友元函数重载#include<iostream>using namespace ...原创 2019-03-22 21:07:05 · 1995 阅读 · 0 评论 -
图的编码实战-最小生成树之克鲁斯卡尔算法
#include<iostream>#include<stdlib.h>#include<vector>using namespace std;//题目信息/* A / | \ B--F--D \/ \/ C H A B C D E F 0 1 2 3 4 5*/...原创 2019-03-18 21:15:08 · 139 阅读 · 0 评论 -
C++静态
对于静态数据成员来说不依赖于对象的实例化而依赖于类 所以他的初始化不再构造函数内访问有两种方式:1、通过类访问 类名::静态数据成员2、通过实例化对象访问 实例化对象的名称.静态数据成员名称静态成员函数不能访问正常的成员函数因为静态数据成员是随着类的产生而产生的 其他的成员是在类实例化的时候才产生的注意事项:静态数据成员必须单独初始化静态成员函数不能调用非静态数据成...原创 2019-03-21 21:21:53 · 312 阅读 · 1 评论 -
C++友元类
友元还可以是类,即一个类可以作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的所有成员函数都是另一个类的 友元函数。所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。关于友元的注意事项 : 右元关系不可以传递 友元声明的函数形式和数量不受限制 友元关系的单向性友元只是封装的补充#include<iostream>...原创 2019-03-21 20:40:33 · 315 阅读 · 0 评论 -
C++内存管理
内存管理实际上就是我们申请/归还内存资源如果申请就用new 如果是归还就用delete,new delete是两个运算符int *p=new int;//用p来接受申请到的int 的一个内存int *p=new int[100];//申请块内存delete []p;//释放块内存但实际我们申请内存时可能会遇到空间用完的情况 这时我们就需要用到以下的方法int *p=new ...原创 2019-03-10 21:55:11 · 83 阅读 · 0 评论 -
C++继承
继承就是我们写完一个类A后,又有一个需要描述的类B包括A中所有信息但还有别的信息的时候,我们就把B中和A联系起来,写成class B: public A这时只要写出比A多出的信息即可,但是实际使用还有A的所有内容。下面我们写一个继承的例子来看一下实例化时的调用顺序#include <iostream>using namespace std;class Person{...原创 2019-03-04 20:50:15 · 193 阅读 · 0 评论 -
C++虚继承
我们在解决实际问题的时候,多继承和多重继承可能出现下面的情况这样就使得D中拥有两组A中一模一样的数据,这是不被允许的,为了解决这种情况,我们引入了虚继承当没有虚继承的时候#include<iostream>#include <string> using namespace std;class Person{public: Person(stri...原创 2019-03-09 22:32:02 · 260 阅读 · 0 评论 -
C++对象指针
我们从两个点横坐标的加减和纵坐标的加减来看如何使用对象指针#include <iostream>using namespace std;class Coordinate{public://这样的访问限定符能让m_iX,m_iY不用函数直接访问 int m_iX; int m_iY;public://同样的访问限定符可以使用多次 Coordinat...原创 2019-03-01 21:05:25 · 316 阅读 · 0 评论 -
C++拷贝函数之深浅拷贝函数
拷贝函数我们在之前已经介绍过了,我们说过的那种拷贝只是一种很浅的拷贝方式,下面会把拷贝函数深浅两种方式都介绍一下。我们用数组为例,先写一个浅拷贝#include <iostream>using namespace std;class Array{public: Array () { m_iCount=5; m_pArr=new int[m_i...原创 2019-03-01 19:30:10 · 412 阅读 · 0 评论 -
C++之数据的封装
放假的时候学习了数据的封装,结果一个假期过去什么都不记得了,今天重新看了一遍,整理记录下来啦至于为什么封装数据-.-菜猪不明白,但是就是觉得会减少很多bug!更严谨的东西基本都是更好哒吧~首先先说类的实例化我们定义一个这样的类class TV{public: char name[20]; int type; void changVol(); ...原创 2019-02-25 17:20:37 · 402 阅读 · 0 评论 -
C++ string类型
针对连接字符串的连接只有s6不可以只有string变量和与双引号引起来的字符串连接才是合法的,s6时非法的原创 2019-02-25 17:27:09 · 163 阅读 · 0 评论 -
面向对象与面向过程的本质的区别
前言:如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间的区别是什么,那么就花费一点时间来研读一下这篇博客,你一定会有很大的收获的!一、面向对象与面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决...转载 2019-02-25 19:27:12 · 117 阅读 · 0 评论 -
C++命名规范
找的别的文章里的一副很好的图~慢慢改自己的命名习惯啊- -肯定是个很漫长的阶段再看C++视频的时候老师教了一个很好的办法在类内定义成员数据的时候,以m_数据类型数据名称为命名规则下面将给出几个例子m_strName string类型的用str简写,数据名称第一个字母用大写m_iAge int 用i简写,数据名称第一个字母用大写在定义读取函数的时候变量名称...原创 2019-02-25 20:15:12 · 328 阅读 · 0 评论 -
C++对象结构
先说一下内存分区内存分为栈区、堆区、全局区、常量区、代码区栈区:int x=0;int *p=NULL;//平常定义变量存储的区,内存由系统来进行分配回收堆区:int *p=new int[20];//使用new申请内存的未来用delete进行释放全局区:存储全局变量及静态变量常量区:string str ="hello";代码区:存储编译之后逻辑代码的二进制若我们定义...原创 2019-02-26 20:41:21 · 493 阅读 · 0 评论 -
C++之构造函数的拷贝函数析构函数
听完这三个函数之后其实有点懵- - 所以又整理一下首先看一下一个对象在程序里经历了什么首先构造函数是在初始化列表的时候用到,具体是怎么写的参考上一个文章《C++对象结构》下一个是拷贝函数的百度在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):1) 一个对象作为函数参数,以值传递的方式传入函数体;2) 一个对象作为函数返回值,以值传递的方式从函数返...原创 2019-02-27 17:34:18 · 307 阅读 · 0 评论 -
C++对象数组的使用
如果说我们要使用对象数组,那就从栈区和堆区两种存储方式上看它的使用#include <iostream>using namespace std;class Coordinate{public: Coordinate(){};//无参构造函数 ~Coordinate(){};//析构函数 /*void setX(int x) { m_iX=x; }...原创 2019-02-28 21:21:43 · 7902 阅读 · 0 评论 -
VC中设置快捷键注释多行代码
第一步:在工具栏上右键选择自定义,然后再选择附加项和宏文件,把“SAMPLE”选项前面打上勾第二步:选择键盘,再选择类别中“Macros”,然后选择“CommentOut”,在“按下新快捷键”中添加自己所想要设置的,例如设置成“Ctrl+Num1”,点击“分配”后确认即完成设置。---------------------作者:小吴的世界来源:优快云原文:https:...转载 2019-03-01 21:08:39 · 1078 阅读 · 0 评论 -
C语言C++程序的运行程序cannot open Debug/1.exe for writing错误
今天,打开VC6.0环境编了个小程序,谁知给我报了“cannot open Debug/1.exe for writing”这样一个错,然后,我就纳闷了,这是什么错丫?想了半天,后想通,为什么会这样:解释如下::当一个程序处于运行状态时,这个程序的exe文件是处于写保护的,不可写,因此用VC重新编译的时候会试图写入1.exe,这时就会出现上面的错误了。所以,应该是在上次调试的时候,1.ex...转载 2019-03-01 21:13:52 · 14353 阅读 · 1 评论 -
C++异常处理
异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用try、catch和finally关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。左边调用者先调用f3()再调用f2()再调用f1(),右边是异常处理顺序常见的异常:...原创 2019-03-13 21:42:03 · 125 阅读 · 0 评论 -
C++案例之走迷宫
原创 2019-03-03 21:13:29 · 672 阅读 · 0 评论 -
C++ 指针常量、常量指针和常指针常量
1、指针常量如果在定义指针变量时候,指针变量前用const修饰,被定义的指针变量就变成了一个指针类型的常变量,指针类型的常变量简称为指针常量。格式如下数据类型 * const 指针变量=变量名;修饰符const与指针变量紧邻,说明指针变量不允许修改,既然指针变量的值不能修改,所以一定要在定义的时候给定初值(指向一个确定存在的地方)如下<span style=...转载 2019-03-03 19:46:05 · 1147 阅读 · 0 评论 -
C++常见错误提示解释
1.编号:C2001error C2001: newline in constant直译:在常量中出现了换行。错误分析:(1) 字符串常量、字符常量中是否有换行。(2) 在这句语句中,某个字符串常量的尾部是否漏掉了双引号。(3) 在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。(4) 在这句语句中,某个字符常量的尾部是否漏掉了单引号...转载 2019-03-03 18:05:10 · 8930 阅读 · 0 评论 -
C++关于const的常对象成员和常成员函数
首先const修饰变量时初始化不能用我们平常的方式初始化也就是下面这种方式是不正确的class Coordiante {public: Coordinate(int x,int y) { m_iX=x; m_iY=y; }private: const int m_iX; const int m_iY;};我们初始化一个const修饰的变量只能用初始化列表的方...原创 2019-03-03 16:52:49 · 836 阅读 · 0 评论