C++
文章平均质量分 54
bxw1992
这个作者很懒,什么都没留下…
展开
-
静态(static)方法的继承和重写
1、父类方法如果是静态方法,子类不能覆盖为非静态方法;2、父类方法如果是非静态方法,子类不能覆盖为静态方法;3、父类静态方法可以被覆盖,允许在子类中定义同名的静态方法,但是没有多态。转载 2017-12-26 14:08:02 · 2644 阅读 · 0 评论 -
指针和引用的区别
精简版:指针:变量,独立,可变,可空,替身,无类型检查;引用:别名,依赖,不变,非空,本体,有类型检查; 1. 概念 指针从本质上讲是一个变量,变量的值是另一个变量的地址,指针在逻辑上是独立的,它可以被改变的,包括指针变量的值(所指向的地址)和指针变量的值对应的内存中的数据(所指向地址中所存放的数据)。 引用从本质上讲是一个别名,是另一个变量的同义词,它在逻辑上不是独立的,转载 2017-07-24 16:10:37 · 263 阅读 · 0 评论 -
const和define
#define RADIUS 100;const float RADIUS = 100;前提:从本质上讲,const只是用来修饰变量的,将变量设置为只读的,因此,const可以用在有变量出现的地方,修饰函数参数、修饰返回值,修饰指针等。define只是用来给常量或表达式起一个别名,预处理期,会用其代表的常量或表达式替换掉。define可以定义表达式,const不可转载 2017-08-23 13:23:11 · 226 阅读 · 0 评论 -
内存对齐
在结构体中,成员数据对齐满足以下规则:a、结构体中的第一个成员的首地址也即是结构体变量的首地址。b、结构体中的每一个成员的首地址相对于结构体的首地址的偏移量(offset)是该成员数据类型大小的整数倍。c、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int ,doubl转载 2017-09-04 22:04:37 · 244 阅读 · 0 评论 -
C++字符数组中的‘\0’问题
string 对象没有 ‘\0’ 字符串数组 用字符串初始化字符数组时,"\0"附带在后面与前面的字符一起作为字符数组的元素。 在内存中,就是根据"\0"来确认字符串,如果找不到就会沿着字符一直找下去。它占用内存空间,但是不计入串长。 用字符串初始化字符数组时,系统会在字符数组的末尾自动加上一个字符"\0",因此数组的大小比字符串转载 2017-08-15 15:47:27 · 13054 阅读 · 0 评论 -
常量字符串,字符串变量——存储位置
指针方式创建的字符数组,是常量字符串,指针指向的内容是没法更改的;方括号([])方式创建的字符数组仅仅是变量,内容可以更改。#includeusing namespace std;int a = 0; //全局初始化区(data段)char *p1; //全局未初始化区(bss段)int main(){ int b; //栈 char s[] = "abc"; //栈,s是字符串原创 2017-06-30 20:20:27 · 932 阅读 · 0 评论 -
c++面试知识点
1、C++虚函数实现机制 一个拥有virtual成员函数的类拥有一个虚函数表,而该类的每个对象都拥有一个虚指针,指向该类的虚函数表。运行时,通过对象自己的虚指针去索引正确的虚函数来运行。若基类中的virtual函数返回类型为基类型的引用或者指针,则派生类中重写该函数,需要将返回类型改为派生类类型的引用或者指针。 在C++的标准规格说明书中说到,编译器必需要保证虚函数表的转载 2017-08-22 10:19:23 · 232 阅读 · 0 评论 -
虚函数和纯虚函数
参考博客虚函数只能借助于指针或者引用来达到多态的效果。称带有纯虚函数的类为抽象类,抽象类是不能定义对象的。虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空(空定义就是大括号为空,而没有大括号会报错),所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类转载 2017-06-29 17:35:02 · 295 阅读 · 0 评论 -
用位操作实现+
将加法的某一项取负,便可以实现减法。(为了避免溢出,将中间变量定义为long long,long达不到要求)用与(&)和左移(用位操作实现加法的步骤为:1、用两个数字的与和左移,判断有没有进位(非0,为有进位)。2、若有进位,将基本和、进位作为相加的两个元素回到步骤1。3、若没有进位,返回基本和#include using namespace std;int add原创 2017-08-13 18:56:42 · 234 阅读 · 0 评论 -
随机数
一、rand() 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件:stdlib.h 函数说明 : rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。 rand()返转载 2017-08-13 16:32:06 · 221 阅读 · 0 评论 -
C++ STL 排序源码详解(二)
Sort函数比较复杂,底层用到了改进快速排序(用3点中值法,确定枢轴),堆排序,插入排序。 总体来说,sort是以快速排序算法为基础进行优化的,优化主要体现在3个方面: 1、任何元素都可以被当做枢轴,但是其合适与否却会影响效率。为了避免元素初始不够随机所带来的恶化效应,取整个队列首、尾、中央三个位置的元素,以其中值作为枢轴。 2、不当的枢原创 2017-08-05 19:37:29 · 618 阅读 · 0 评论 -
各种排序算法的时间复杂度
各种常用排序算法类别排序方法时间复杂度空间复杂度稳定性复杂性特点最好平均最坏辅助存储 简单 插入排序直接插入O(N)O(N2)O(N2)转载 2017-08-05 21:59:30 · 3307 阅读 · 0 评论 -
gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接
一般高级语言程序编译的过程:预处理、编译、汇编、链接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查、代码调试、汇编语言等。1、预处理预处理是C语言程序从源代码变成可执转载 2017-08-23 14:47:02 · 747 阅读 · 0 评论 -
sizeof和strlen
sizeof() 是运算符,功能是计算传入参数的占用存储空间(单位是字节)。在编译期就可以确定其返回值,参数可以是:基础类型、对象、数组、指针。strlen()是函数,运算时才能确定其值,只能计算字符串中存储的字符个数,也就是‘\0’结束符前的字符个数,只是计算字符串大小的,并不是计算内存大小的。传入参数只能是char*。一、sizeof sizeof(...)是运算符,在头文件中转载 2017-08-23 16:28:39 · 168 阅读 · 0 评论 -
重载、覆盖和隐藏的区别
在继承关系中,虚函数是根据指针指向的对象来确定调用哪个函数,而非虚函数是根据指针的类型来选择调用哪个函数,跟指向的对象无关。以下参考博客:1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例代码如下:class A{public: void转载 2017-06-29 22:57:07 · 441 阅读 · 0 评论 -
this指针 静态成员 友元
一、this指针在建立对象时,系统会为每一个对象分配独立的存储空间,也就是给每个对象中的数据成员都分配有自己独立的存储空间。如果对同一个类定义n个对象,则有n组同样大小的空间以存放对象中的数据成员。但对于成员函数来说,函数的代码段在内存中只有一份。也就是说,同一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码。那么,当一个对象调用自己的成员函数时,如何保证成员函数中对转载 2017-06-29 17:04:00 · 716 阅读 · 0 评论 -
关于C++中的友元函数的总结
关于C++中的友元函数的总结1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有转载 2017-09-03 12:18:10 · 449 阅读 · 0 评论 -
C++ STL中有两种find
1、algorithm中的函数其调用形式为find(start,end,value)start搜寻的起点,end搜寻的终点,要寻找的value值容器的表示方法find(a.begin(),a.end(),value)数组的表示方法find(a,a+length,val)所有的返回,均是迭代器(容器)或指针(数组),而非是直观感觉上的索引下标。如果在查找范围内不存在,原创 2017-08-31 16:38:49 · 17653 阅读 · 4 评论 -
main函数之前执行了哪些操作
main函数在执行前和执行后有哪些操作main函数执行之前,主要就是初始化系统相关资源: 1. 设置栈指针 2. 初始化static静态和global全局变量,即data段的内容 3. 将未初始化部分的全局变量赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容原创 2017-08-24 15:52:00 · 2411 阅读 · 0 评论 -
带空格或逗号的字符串和基础数据类型的互相转换
知识点:istream& getline ( istream& is, string& str, char delim )与istream& getline ( istream& is, string& str );第一个参数是输入流,可以是:cin、stringstream、istringstream第二个参数存放从输入流中读出的字符串:string类型第三个参数(默认是空格):原创 2017-08-28 18:56:28 · 823 阅读 · 0 评论 -
一般笔试输入的处理
输入举例(数字以空格分割,每行以“\n”结尾):1 2 3 45 6不预先给出每一行数学的个数一、getline+stringstreamC++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。istringstream类用于执行C++风格的串流的输入操作。 os原创 2017-08-26 23:20:15 · 443 阅读 · 0 评论 -
C++中虚继承的作用及底层实现原理
虚继承和虚函数是完全无相关的两个概念。虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承可以解转载 2017-08-30 22:26:11 · 60304 阅读 · 6 评论 -
虚函数实现原理
简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例:转载 2017-08-18 10:59:25 · 3973 阅读 · 0 评论 -
C和C++中struct区别
1、C和C++ struct的区别C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数(在纯粹的C语言中,struct不能定义成员函数,只能定义变量)。C++中struct还有构造函数和成员函数,其实它还拥有class的其他特性,例如继承、虚函数等。它只和class有略微的区别,其他功能相同。2、C++中struct和clas转载 2017-08-23 16:54:50 · 601 阅读 · 0 评论 -
C++ STL 排序源码详解(一)
(全部以int类型的vector为处理对象) STL有关排序的几个函数如下所示,需要更少资源(时间和空间)的算法列在需要更多的前面,需要指出的是他们完成的工作是不一样的。1. partition 4. partial_sort2. stable_partition 5. sort3. nth_element原创 2017-08-04 22:01:08 · 910 阅读 · 0 评论 -
new和molloc的区别
1、new自动计算需要分配的空间,而malloc需要手工计算字节数2、new operator 由两步构成,分别是 operator new 和 construct,而malloc只是分配内存。delete将调用destructor,而free不能。3、new返回的指针带有指定类型,而malloc返回void类型指针,需要显示转换4、new是类型安全的,而malloc不是,比如:转载 2017-08-19 18:29:20 · 675 阅读 · 0 评论 -
INT_MAX
#define INT_MAX (((unsigned int)(-1))>>1)原创 2017-08-11 20:40:34 · 2063 阅读 · 0 评论 -
类的构造函数
知识点:1、当且仅当没有定义构造函数,编译器才会提供默认的构造函数;2、如果自己定义了构造函数,必须显式地提供默认构造函数;3、当使用类和结构体时,必须注意提供复制(也叫拷贝)构造函数和赋值函数;4、复制构造函数的作用是创建新的对象,赋值函数的作用是用对象给已经存在的对象赋值;5、注意等号“=”不一定就调用赋值函数,有可能是调用复制构造函数。#includeusing原创 2017-07-06 15:49:17 · 313 阅读 · 0 评论 -
algorithm中sort函数的使用
知识点:只有定义为vector型变量,才可以使用第一种形式;第二种形式,需自己定义数组元素比较大小的方式,函数返回类型为bool,调用时,只需函数名,不要加()sort(a.begin(),a.end)sort(a.begin(),a.end,myfun)#include#include#includeusing namespace std;typedef struct原创 2017-07-05 22:27:07 · 3148 阅读 · 0 评论 -
restrict关键字
restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同转载 2017-07-02 17:24:57 · 192 阅读 · 0 评论 -
C/C++程序的内存分配
C/C++程序到内存分配一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——转载 2017-06-28 23:28:10 · 323 阅读 · 0 评论 -
C和C++在参数传递方面的区别
C语言不支持引用传参,如果想要改变传入参数的值,只能用传入指针的方式。C语言的方式:#include"stdio.h"void fun(int *i){ *i = *i + 10;}int main(){ int val=10; fun(&val); printf("%d",val); system("pause"); return 0;}C++语言支持指针和引用方转载 2017-07-01 19:12:29 · 366 阅读 · 0 评论 -
C++ STL系列(二)Iterator
介绍Iterator转载 2017-06-29 11:05:43 · 263 阅读 · 0 评论 -
C++ STL系列(一)简介
介绍STL概况转载 2017-06-29 11:02:59 · 388 阅读 · 0 评论 -
C++ STL系列(三)Algorithm
介绍Algorithm,主要看树的遍历,sort算法的自定义转载 2017-06-29 11:07:51 · 242 阅读 · 0 评论 -
常量指针和指针常量的区别详解
下面通过一个例子来解析常量指针和指针常量,我们先总结一下常量指针和指针常量的区别首先一定要明白哪种定义方式是常量指针,哪种是指针常量,这里可以记住三句话加深记忆:* (指针)和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。好吧,让我们来看这个例子:[cpp] view plain copy转载 2017-06-29 10:58:14 · 383 阅读 · 0 评论 -
void 指针
void指针是一种特别的指针转载 2017-05-20 17:09:28 · 489 阅读 · 0 评论 -
构造函数、析构函数与虚函数概念
1、构造函数构造函数不能是虚函数。创建派生对象时,将调用派生类的构造函数,而不是基类的构造函数,派生类的构造函数将使用基类的一个构造函数,这种顺序不同于继承机制。因此派生类不继承基类的构造函数。(自己理解:构造函数用于创建对象,虚函数的多态,只有在基类指针指向了对象后才会起作用,而对象的产生需要构造函数,也就是构造函数在虚函数起作用之前,因此构造函数为虚函数无意义)。2、析构函数如果某原创 2017-07-06 20:20:29 · 475 阅读 · 0 评论 -
vector和map编程零碎知识点(一)
一、vectorvector dp(10,2);创建一个长度为10的数组,初始化为2;二、map和unordered_map头文件map: #include unordered_map: #include 创建和查找使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。使用find,返回的是原创 2017-07-03 16:07:09 · 374 阅读 · 0 评论 -
static作用(修饰函数、局部变量、全局变量)
首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。一个文件的全局变量和函数可以被另一个文件访问。为理解这句话,我举例来说明。转载 2017-06-30 11:06:27 · 395 阅读 · 0 评论