C++
wenbin1996
最怕自己一生碌碌无为,还安慰自己平凡可贵。
展开
-
C++中实现无符号右移
无符号右移的意思是右移时不考虑符号问题,即无论右移正数还是负数,其最高位都是补0。不同于普通的“>>”移位操作,使用“>>”右移时,是以符号扩展原则进行右移,即在右移过程中它将保持原有数据的正负号不变,简单地说,就是在右移正数时高位补0、右移负数时则高位补1。 在java中,提供了无符号右移操作符“>>>”,与普通的“>>”区分开来。但是在c++中并没有这样的操作符,在c++中实现的方式也很简原创 2017-09-06 21:46:47 · 6860 阅读 · 0 评论 -
C++浮点数的存储方式
类型float大小为4字节,即32位,内存中的存储方式如下:最高位 31 位 ,保存符号位 S,“0”表示正数 ,“1”表示负数第30 位~23 位 ,共 8 位 ,保存指数部分(指数值加上偏移量127) ,称为阶码第22 位~0 位 ,共 23 位 ,保存系数部分 (整数位的1不保存),称为尾数类型double大小为8字节,即64位,内存布局如下: 最高位 6...原创 2018-02-24 18:18:24 · 1438 阅读 · 0 评论 -
C++类型转换操作符 dynamic_cast
dynamic_cast 顾名思义是支持动态的类型转换,即支持运行时识别指针或引用所指向的对象。dynamic_cast<>用于C++类继承多态间的转换,分为:子类向基类的向上转型(Up Cast) 基类向子类的向下转型(Down Cast) 其中向上转型不需要借助任何特殊的方法,只需用将子类的指针或引用赋给基类的指针或引用即可,dynamic_cast向上转型其总是...原创 2018-03-03 17:15:56 · 1730 阅读 · 0 评论 -
C++多重继承下的指针类型转换
在C++中,指针的类型转换是经常发生的事情,比如将派生类指针转换为基类指针,将基类指针转换为派生类指针。指针的本质其实就是一个整数,用以记录进程虚拟内存空间中的地址编号,而指针的类型决定了编译器对其指向的内存空间的解释方式。基于上面的理解,我们似乎可以得出一个结论,C++中对指针进行类型转换,不会改变指针的值,只会改变指针的类型(即改变编译器对该指针指向内存的解释方式),但是这个结论在C++多...转载 2018-02-22 16:13:38 · 544 阅读 · 0 评论 -
C++虚函数继承与虚继承
虚函数继承和虚继承是完全不同的两个概念。虚函数继承是解决多态性的,当用基类指针指向派生类对象的时候,基类指针调用虚函数的时候会自动调用派生类的虚函数,这就是多态性,也叫动态编联。虚继承就是为了节约内存,他是多重继承中的特有的概念。适用于菱形继承形式。比如B继承于A、C继承于A、D继承于B和C,显然D会继承两次A(图1)。因此,为了节省空间,可以将B、C对A的继承定义为虚拟继承,而A就成...原创 2018-02-22 15:56:40 · 15081 阅读 · 5 评论 -
C/C++知识点回顾与总结
本博客总结C/C++的常见知识点,如有问题欢迎提出,转载请注明出处http://blog.csdn.net/qq_34342154/article/details/78876099一、C和C++的区别C++在C的基础上增加类C面向过程,C++面向对象C主要考虑通过一个过程将输入量经过各种运算后得到一个输出, C++ 主要考虑是如何构造一个对象模型,让这个模型契合与之对应的问题域,...原创 2017-12-22 19:03:45 · 740 阅读 · 0 评论 -
什么是字节对齐,为什么需要字节对齐
概念 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 为了使CPU能够对变量进行快速的访问,变量的起始地转载 2018-02-02 18:30:06 · 15046 阅读 · 0 评论 -
C/C++常用预处理指令总结(#ifdef,#ifndef,#endif,#pragma once ...)
本文主要记录了C/C++常见预处理指令。包括#include、#define、#ifdef,#ifndef,#endif,#pragma once 什么是预处理指令? 预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。 预处理指原创 2017-12-24 22:44:14 · 867 阅读 · 0 评论 -
C++常用操作总结
数组,向量,字符串,栈,队列,链表,字典,集合,文件读写,异常处理原创 2017-11-30 16:17:13 · 407 阅读 · 0 评论 -
C++虚函数表剖析
一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表 每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有转载 2017-12-22 19:24:53 · 257 阅读 · 0 评论 -
C++中的文件输入/输出
简介 本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include <fstream.h>void main() //程序从这里转载 2017-11-29 12:06:30 · 669 阅读 · 0 评论 -
C/C++从源代码到可执行程序的过程详解
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码--&amp;gt;预处理--&amp;gt;编译--&amp;gt;优化--&amp;gt;汇编--&amp;gt;链接–&amp;gt;可执行文件Source–(编译)–&amp;gt; Ass转载 2018-06-05 16:28:09 · 4036 阅读 · 0 评论