C++基本知识
THEALVA
这个作者很懒,什么都没留下…
展开
-
typedef与define
#define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。#define PINT int* 就是把所有的词 PINT 替换成 int * ,替换完毕再编译。 typedef int* pint; 是语句,由编译器在编译过程中编译处理。int* x; 和pint x; 的声明是等价的typedef int* pint;lon转载 2014-11-24 22:45:51 · 367 阅读 · 0 评论 -
内存中堆和栈的区别
原文转自http://blog.csdn.net/mishifangxiangdefeng/article/details/72007301.数据在内存中的存放形式1)栈区:由编译器自动分配和释放一般存放函数的参数值、局部变量的值等2)堆区:由程序员分配及释放。若程序员不释放,程序结束后可能由OS回收3)寄存器区:用来保存栈顶指针和指令指针4)全局区(静态区):全局变量和静转载 2015-04-08 21:51:00 · 2949 阅读 · 0 评论 -
面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析(解决面试宝典第四版P147问题)
http://blog.csdn.net/yuanyirui/article/details/4594805http://www.oschina.net/question/565065_72355转载 2015-04-11 22:47:37 · 381 阅读 · 0 评论 -
虚函数继承与虚继承
一、虚函数继承(原文转自http://blog.chinaunix.net/uid-25132162-id-1564955.html)1、空类,空类单继承,空类多继承的sizeof#include using namespace std;class Base1{};class Base2{};class Derived1:public Base1{};转载 2015-04-11 16:28:24 · 589 阅读 · 0 评论 -
auto_ptr智能指针
转自http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指转载 2015-04-05 21:08:02 · 525 阅读 · 0 评论 -
浮点型数据在内存中的存储
原文转自http://blog.csdn.net/chenyujing1234/article/details/7683635学计算机N年了,一年懒得去了解小数的存放,趁今天想知道double数据存放格式,了解了一下,真是懒不得,无论什么样的基础知道,早晚一天还是要学到心中的。一、浮点型数据在内存中存储的表示实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。数的精度取决于尾数转载 2015-04-04 17:33:26 · 588 阅读 · 0 评论 -
int,string,char*的类型转换
1.int转换为string:可以利用stringstream,要包含头文件#include 。int main(){//int转string stringstream ss; int i=100; string str; ss<<i; ss>>str; cout<<str; return 0;}2.string转换为int:与int转换为string类似,也要借用s原创 2015-03-25 10:34:12 · 1197 阅读 · 0 评论 -
char与int等数据类型的强制转化
1.首先char与int都分为signed与unsigned类型,默认情况下都是signed类型。2.从长字节数据类型转换为短字节数据类型,会产生截断:如从4字节的int类型转换成1个字节的char类型,则取int数据的最低的一个字节,将这个字节的数据赋给char型数据,且是有符号的,即首位为符号位;而如果是从int转换成unsigned char类型,则整个一个字节都是数据,没有符号位。原创 2015-03-25 09:29:52 · 33215 阅读 · 3 评论 -
C++的强制转换(4个关键字)
强制转化四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的。不了解的建议看看,一些机制我也不是十分了解,只是将一些用法写出来让大家看看。2004-11-27 9:00强制转化无论从语法还是语意上看,都是c++中最难看的特征之一。但是基于c风格的转化的语义的不明确性及其一些潜在问题。强制类型转化最终还是被c++接受了。1.static_cast运算符号static_c转载 2015-03-25 12:34:10 · 660 阅读 · 0 评论 -
大端模式与小端模式
http://blog.163.com/leng_zzu@126/blog/static/49955027201161210511469/http://blog.csdn.net/ce123_zhouwei/article/details/6971544转载 2015-04-08 21:36:23 · 332 阅读 · 0 评论 -
C/C++中extern关键字详解
http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: e转载 2015-05-11 19:41:58 · 464 阅读 · 0 评论 -
重载,重定义与隐藏
重载:在同一个类中,要求函数名相同,函数参数不同重定义:在基类与派生类之间,派生类重新定义基类中的函数,且要求函数的名称、参数类型以及返回值类型完全一致。如果基类中的函数为virtual,则通过基类指针指向派生类时,可以实现多态。如果是非virtual,通过基类指针,不论指向的是基类还是派生类,所调用的都是基类的函数;通过派生类指针,调用的则是派生类的函数。(即实际调用的函数由指针的静态类型决原创 2015-08-15 16:02:13 · 888 阅读 · 0 评论 -
HTTP协议详解
转自http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.htmlHTTP协议详解一、概念协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议(Hypert转载 2015-08-29 21:51:53 · 607 阅读 · 0 评论 -
C和C++中const的区别
原文出自http://www.cnblogs.com/dolphin0520/archive/2011/04/18/2020248.html一.C语言中的constconst是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。(1)用cons转载 2015-04-05 12:44:04 · 414 阅读 · 0 评论 -
main函数执行前、后再执行的代码
http://blog.csdn.net/huang_xw/article/details/8542105一、main结束 不代表整个进程结束 (1)全局对象的构造函数会在main 函数之前执行, 全局对象的析构函数会在main函数之后执行; 用atexit注册的函数也会在main之后执行。 (2)一些全局变量、对象和静态变量、对象的转载 2015-08-26 22:07:02 · 512 阅读 · 0 评论 -
可重入函数与不可重入函数(转)
可重入函数与不可重入函数(转)转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html转自http://www.cnblogs.com/luvi/archive/2008/05/09/1190493.html主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行转载 2015-08-25 20:43:07 · 381 阅读 · 0 评论 -
#ifndef/#define/#endif使用详解
转自http://blog.csdn.net/abc5382334/article/details/18052757想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入转载 2015-08-07 20:04:24 · 470 阅读 · 0 评论 -
C/C++中volatile关键字详解
转自http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html1. 为什么用volatile?C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对转载 2015-05-23 22:24:57 · 315 阅读 · 0 评论 -
函数重载之const
转自http://m.blog.csdn.net/blog/jiutoushe2008/22686463我们知道,如果函数名相同,在相同的作用域内,其参数类型、参数个数,参数顺序不同等能构成函数重载。有趣的是如果同时在类中,对于函数名相同的const函数和非const函数能够构成重载,同时它们被调用的时机为:如果定义的对象是常对象,则调用的是const成员函数,如果定义的对象是非常对象,则转载 2015-06-25 14:17:49 · 696 阅读 · 0 评论 -
sizeof浅析——求结构体大小
http://blog.csdn.net/szchtx/article/details/8801583http://blog.csdn.net/van150/article/details/544454转载 2015-03-23 16:02:58 · 302 阅读 · 0 评论 -
枚举
在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚举类型。例如: enum weekday{sun,mon,tue,wed,thu,fr转载 2015-03-23 22:32:17 · 382 阅读 · 0 评论 -
删除已经排好序的数组中的重复元素(个人笔记)
for(i=0;i{if(num[i]==num[i+1]){for(j=i+1;j{num[j]=num[j+1];}n--;i--;}}原创 2014-11-20 22:19:19 · 600 阅读 · 0 评论 -
仿函数
仿函数其作用和函数类似,但是,表现形式却是类。在容器以及排序过程中,可以用仿函数提供排序的依据。今天琢磨了一下午,总算把仿函数的用法弄清楚了一点。此文为个人总结,不保证没有错误的地方。1.在关联容器的定义过程中,自定义compare函数。由于是出现在定义过程中,用于指定关联容器模板类型,所以,参数一定时类型而不是具体的对象。以map为例:template > class原创 2015-01-12 21:13:31 · 472 阅读 · 0 评论 -
static_cast
static_cast (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在方法中定义一个static变量,该变量在程序开始存在直到程转载 2014-10-24 22:06:32 · 490 阅读 · 0 评论 -
printf和cout右向左求值
#include using namespace std;int main(){ int i=2; int b=2; int *ptr1=&i; int *ptr2=&b; cout<<*ptr1<<" "<<*ptr1++<<endl; cout<<*ptr2<<" "<<(*ptr2)++<<endl; return 0;}(*p)++等价于*p=*p+1也就是原创 2015-02-02 16:42:05 · 619 阅读 · 0 评论 -
【单链表】环的入口点
本文文字部分转自http://blog.sina.com.cn/s/blog_6a0e04380101a9o2.html求解单链表环入口点的步骤:1:使用“指针追赶”方法找到相遇点(网上资料很多,此处略)。2:指针p1从链表头、p2从相遇点,同时出发,一次移动一个节点,再次的相遇点便是环的入口点。理解了好久,终于证明了为什么步骤2那样就能找到入口点。证明导向:p1从表头走,转载 2015-02-03 19:11:30 · 634 阅读 · 0 评论 -
用递归实现全排列
如将s="ABCD"实现排列组合,有4!种排列方式。思路:s的排列可分为:'A'打头的6个排列;'B'打头的6个排列;'C'打头的6个排列;'C’打头的6个排列;而每个以A打头的排列中,在A的后面跟着是BCD的不同排列组合。这就给出了一个递归的解决方法。/*用递归进行全排列*/#include #include using namespace std;void原创 2014-12-26 17:37:29 · 847 阅读 · 0 评论 -
【C++】自我赋值问题
【C++】自我赋值问题首先通过一个例子引出自我赋值可能会导致的问题,例子如下: 1 class Bitmap {...}; 2 class Widget { 3 public: 4 ... 5 Widget& operator=(const Widget& rhs); 6 ... 7 private: 8 Bitmap*转载 2014-11-06 18:52:47 · 977 阅读 · 0 评论 -
C++ map排序
C++ map排序(按照value值排序) 转载▼正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢?有两种方法:1. 将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序,其中map_verb存放我的map值:map转载 2014-11-27 16:42:11 · 587 阅读 · 0 评论 -
stringstream中的.clear()和.str()
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要先继续清空,而清空很容易想到是clear方法,而在stringstream中这个方法实际上是清空stringstream的状态(比如出错等),真正清空内容需要使用.str(“”)方法。用.str(“”)方法可以清楚缓存,但是,需要重复使用同一个stringstre原创 2015-02-07 22:43:31 · 778 阅读 · 0 评论 -
stringstream的重要用法(数据类型转换)
本文转自http://blog.csdn.net/joeblackzqq/article/details/7032703C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C++转载 2015-02-07 22:10:48 · 914 阅读 · 0 评论 -
const关键字
首先像这样的声明void fun() const;必须是类的成员函数,不能是单独的类外部函数其次,如果为类成员函数,他表示(1)不能修改成员变量; (2)不能调用非const函数; (3)其他const函数可以调用它;(其他非const函数当然也可以调用它) (4)只能从const对象(或引用用指针)上调用,比如:const A a; a.f();补充:转载 2015-03-22 15:46:35 · 325 阅读 · 0 评论 -
快速排序
http://developer.51cto.com/art/201403/430986.htm转载 2015-03-30 10:25:43 · 332 阅读 · 0 评论 -
返回局部指针变量
返回值为数值时,返回局部变量可以,而返回值为引用或指针时,则存在风险。局部变量是存在于栈中的,函数被调用时先在栈中为变量申请空间,调用完成释放变量空间。函数在返回参数的时候是这样的,先把要返回的数放在寄存器eax中,然后回到主函数中取出eax中的数值放在变量里,所以这样是不涉及函数中变量地址的。如果要返回引用,也就是变量地址,那么它会把这个变量的地址放在eax中,(注意这个地址是位于函数的原创 2015-03-29 09:34:05 · 6656 阅读 · 3 评论 -
C++虚函数
http://blog.csdn.net/haoel/article/details/1948051/http://www.cnblogs.com/Ripper-Y/archive/2012/05/15/2501930.html转载 2015-03-27 22:35:26 · 413 阅读 · 0 评论 -
C++成员变量、构造函数的初始化顺序
本文转自http://www.360doc.com/content/15/0326/15/22588076_458213585.shtml#一、C++成员变量初始化1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行2、static 静态变量(本地化数据和代码范围):static变量属于类所有,而不属于类的对转载 2015-03-26 15:16:51 · 2572 阅读 · 0 评论 -
关于类继承/初始化成员变量/构造函数/析构函数 执行顺序
本文转自http://blog.csdn.net/littlegreenfrog/article/details/5334833关于类继承/初始化成员变量/构造函数/析构函数 执行顺序.先看如下代码:#include using namespace std;class A {public: A() {cout << "A" << endl;} ~A() {cout << "转载 2015-03-25 22:45:56 · 739 阅读 · 0 评论 -
C++成员变量初始化顺序
class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; } }; int ma转载 2015-03-25 22:14:00 · 663 阅读 · 0 评论 -
二叉树的构造方法
做Leetcode上面的题目时,遇到二叉树的问题,想要用一个二叉树进行验证,每次构造二叉树都很麻烦,特此写一个构造函数。1.用数组构造二叉树void treeNodeConstructor(TreeNode *&root, int data[],int n,int index){//此处root一定要加&,为对指针的引用 /* data为存储节点数据的数组,n为data数组的长度,in原创 2015-02-10 13:50:13 · 4621 阅读 · 0 评论 -
struct的初始化及其构造函数
http://blog.csdn.net/niuox/article/details/7253374今天看数据结构时,突然看到一个用构造函数进行初始化的struct结构体,这个比较新鲜,因为以前从来没有看到过,于是想了想struct到底有没有构造函数以及struct如何初始化,上网查了一些资料,供大家参考!结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继转载 2015-08-07 21:49:30 · 5876 阅读 · 0 评论