深入剖析C/C++
文章平均质量分 71
学习C/C++时你可能会有很多困惑,很多知识点只是知其然不知其所以然,在这儿,我会让你知其所以然。
ljx_csdn
菜鸟成长记!!
展开
-
初识C++之虚函数
1、什么是虚函数 在基类中用virtual关键字修饰,并在一个或多个派生类中被重新定义的成员函数,用法格式为: virtual 函数返回类型 函数名(参数表) { 函数体 } 虚函数是实现多态性的关键,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。 看两个例子: ①没有定义基类的Fun函数为虚函数:#define _CRT_原创 2016-04-13 01:13:00 · 3680 阅读 · 2 评论 -
初识C++之封装
学习C++不得不说到C++的三大特性:封装、继承、多态,今天就先来剖析一下他的封装性。 1、什么是封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。下面把一个汽车抽象为一个类来举例: 2、封装的目的 封装的目的是增强安全性和简化编程,它们分别体现在: ①增强安全性:使用原创 2016-04-12 21:21:09 · 889 阅读 · 0 评论 -
初识C++之函数重载、重写、重定义的区别
在C++的学习中,慢慢接触了一些很容易混淆的名词,今天就来剖析几个容易混淆的名词。 1、函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。想要构成重载函数必须要满原创 2016-04-12 19:56:31 · 3862 阅读 · 0 评论 -
初识C++之继承
1、何为继承 C++中所谓继承,就是在一个已存在类的基础上创建一个新的类,新类获得已存在类的部分特性(为什么是部分特性,后面会讲到)。已存在类被称为基类(Base Class)或父类(Father Class),新建类被称为派生类(Derived Class)或子类(Son Class)。 继承的声明形式: class 派生类名:[继承方式] 基类列表 { 派生类增加的特性; }原创 2016-04-11 17:30:51 · 2649 阅读 · 0 评论 -
对堆栈的认识
什么是堆和栈,它们在哪儿?问题描述编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)? 1、在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗? 2、它们的作用范围是什么? 3、它们的大转载 2016-03-29 01:51:38 · 2284 阅读 · 2 评论 -
初识C++之运算符重载
define原创 2016-03-28 15:01:46 · 555 阅读 · 0 评论 -
初识C++之剖析const与#define
1、 编译器处理方式不同 #define是一个宏定义命令,它是在预处理阶段就进行了替换; const修饰的是一个编译时常量,它是在编译阶段处理的。 2、 类型和安全检查不同 #define定义的标识符仅仅是产生文本替换,不管内容是否正确; const修饰的符号是一个具有类型的符号,编译器在编译时会对其做严格的检查。 3、书写方式不同 #define是一个预处理命令,原创 2016-03-26 17:44:36 · 457 阅读 · 0 评论 -
const在C与C++中的区别
1、C语言中的const a. 修饰变量 使用const修饰变量,使该变量的值不能被修改 b. 修饰函数参数原创 2016-03-26 00:13:17 · 1011 阅读 · 0 评论 -
初识C++之函数重载
最近开始学习C++,了解到它在C语言没有的一个特性 – 函数重载,这一特性使得c++的函数数量得以减少,减小了对名字空间的污染,另外对程序的可读性也有很大帮助。那么c++的函数重载这一特性是怎么实现的,为什么不会发生命名冲突呢?别的函数在调用这些函数时编译器是怎么解析的呢?怎么知道它该调用哪一个函数呢?下面就这些问题来做一些简单解析。1、what and whywhat:C++允许在同原创 2016-03-25 16:44:42 · 987 阅读 · 0 评论 -
重载函数编译后的新名字
我们都知道很多语言都支持函数重载,那么编译器是怎么处理编译后它们的命名冲突的呢?1、先给出几个正确的重载函数:#include <iostream>using namespace std;int Add(int a, int b){ return a + b;}double Add(double a, double b){ return a + b;}double Add原创 2016-03-25 16:31:08 · 1832 阅读 · 0 评论 -
main()函数参数
很多人学了很长时间的C语言,可能还不知道mian()函数也是有参数的,甚至会说,main()函数哪来的参数,我从来都没见到过,更没有使用过,然而,不得不说,main()函数确实是有参数的。main函数的参数: main(int argc , char *argv [] , char *envp) 1、int argc: argv数组中元素的个数(不包括NULL) 2、char *argv原创 2016-03-10 10:30:58 · 1001 阅读 · 0 评论 -
测试机器大小端的方法
首先,给出一些大小端相关概念。大小端的由来: 在乔纳森·斯威夫特的著名讽刺小说《格列夫游记》中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破。斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧。大小端概念: 小端模式: 小端模式(Little-endian),是指数据的高字节保存在原创 2016-03-10 09:29:06 · 3052 阅读 · 0 评论 -
C语言注释与C++注释的相互转换
做此项目的经历主要的收获是熟悉了状态机这一方法的使用,还有就是对每实现一个功能就尽量封装一个函数这一概念把握的更为精到。状态机:关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是原创 2016-03-09 00:26:05 · 1890 阅读 · 0 评论 -
多维数组元素的下标引用与指针访问
在这儿值介绍二维数组元素的访问方式,三维、四维……的与之类似。 先用一位数组的相关知识来抛砖#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>//1、一维数组元素的下标引用与指针访问int main(){ int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; printf("%d\n"原创 2016-03-06 19:46:50 · 1953 阅读 · 0 评论 -
数组的下标越界与内存溢出
很相似的两个概念,一不小心就会混淆首先,对两个名词做一个大概的解释:下标越界 在引用数组元素时,使用的下标超过了该数组下标的应有范围,但应注意的是: C/C++不对数组做边界检查。 可以重写数组的每一端,并写入一些其他变量的数组或者甚至是写入程序的代码。不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这原创 2015-12-15 14:04:02 · 17489 阅读 · 1 评论 -
浅谈C语言字节对齐
首先,我们得知道为什么要进行内存对齐,它的意义何在?在这儿可以先看这样一张图。(手绘请见谅!!!) 我们知道,在32位CPU下,一个读取周期可以读取四个字节。一个字符变量在内存中占一个字节,而整型为在内存中占4个字节。 那么CPU一个读写周期刚好能读取一个整形,所以如上边左图,两个整型变量分别读写一次即可;而上面中间的图,第一个读写周期读取的四个字节为一个char变量原创 2015-11-24 01:51:40 · 1725 阅读 · 0 评论