C++
文章平均质量分 73
CMbug
这个作者很懒,什么都没留下…
展开
-
【七】C++一些新的关键字 -- new、delete、强制类型转换
1、动态内存分配C++中的动态内存分配已经和C语言有了明显区别:C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的delete关键字用于内存释放 变量申请和释放:Type* pointer = new Type;// ……delete pointer; 数组申请和释放:Type* pointer = new Type[N];// ……delete[原创 2015-08-23 14:55:34 · 2366 阅读 · 0 评论 -
【二】C++基于C的一些改变
1、布尔类型C++在C语言的基本类型系统之上增加了bool;实际上,C99的标准中也引入了bool类型,使用时需要引用stdbool.h头文件C++中的bool可取的值只有truea和false;理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现;C++编译器会在赋值时将非0值转换为true,0值转换为false; Tip:true原创 2015-08-14 11:01:03 · 726 阅读 · 0 评论 -
【六】C & C++ 函数相互调用
在项目中融合C++和C代码是实际工程中不可避免的,虽然C++编译器能够兼容C语言的编译方式,但C++编译器会优先使用C++的方式进行编译,为了让它们能互相调用,可以利用extern关键字强制让C++编译器对代码进行C方式编译! 1、C++调用C编写的函数假设有如下的代码: main.cpp#include <iostream>#include "test.h"using namesp原创 2015-08-15 16:54:21 · 1873 阅读 · 0 评论 -
【五】C++函数的升级(二)
目录目录1函数默认参数2函数占位参数1、函数默认参数C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替只有参数列表后面部分的参数才可以提供默认参数值一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值示例:exp-1.cpp#include <stdio.h>int add(int a, int b =原创 2015-08-15 11:47:48 · 566 阅读 · 0 评论 -
【三】C++引用机制
目录目录1变量名回顾2引用的概念3引用的意义4const引用5引用的本质6函数返回引用7C对三目运算符做了什么8小结 1、变量名回顾变量是一段实际连续存储空间的别名程序中通过变量来申请并命名存储空间通过变量的名字可以使用存储空间 如图: 思考: 对于一段连续的存储空间只能有一个别名吗? 肯定不是,因此我们可以给同一个连续的存储空间取多个别名,这就诞生原创 2015-08-14 16:52:19 · 1567 阅读 · 0 评论 -
【八】疑难问题小结(一 -- 七篇)
目录目录1const和引用的疑惑什么是符号表符号表存储在程序中的哪个地方怎样定义const常量才会使用符号表2引用与指针的疑惑指针与引用的区别如何理解引用的本质就是指针常量3重载与默认类型转换C编译器对字面量的处理方式当使用字面量对变量进行初始化或赋值时深入理解重载规则4C方式编译的疑惑深入理解extern C1、const和引用的疑惑关于const和引用的疑难问题,在前面的原创 2015-08-17 13:38:19 · 951 阅读 · 0 评论 -
【十】运算符重载(上)
1、C++标准库C++标准库并不是C++语言的一部分C++标准库是由C++语言编写而成的类库和函数的集合C++标准库中定义的类和对象都位于std命名空间中C++标准库的头文件都不带.h后缀C++标准库涵盖了C库的功能C库中name.h头文件对应C++中的cname头文件C++标准库预定义了多数常用的数据结构,如:字符串,链表,队列,栈等示例:一个类C风格的C++程序:#include原创 2015-08-22 18:05:22 · 493 阅读 · 0 评论 -
【一】C++基于C的一些改变
1、register关键字的变化register关键字请求“编译器”将局部变量存储于寄存器中 C语言中无法取得 register 变量地址在C++中依然支持register关键字 C++编译器有自己的优化方式,不使用register也可能做优化C++中可以取得 register 变量的地址 C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。原创 2015-08-13 17:12:57 · 1042 阅读 · 0 评论 -
【四】C++函数的升级(一)--内联函数
目录目录1宏的回顾2内联函数的使用3内联函数4内联函数的特点4编译器的优化5内联编译的限制6内联实现机制1、宏的回顾在C语言中,可以定义宏常量和宏代码片段,但是它们各自都有不足,它们都是在预编译阶段进行简单的文本替换,没有类型安全等相关检查;在C++中,宏常量可以用const常量代替,并且const常量会更加安全,它在编译阶段进行处理; const int A = 3; <==>原创 2015-08-15 11:13:31 · 1017 阅读 · 0 评论 -
【二十】一个面试题
面试题: 写函数判断一个变量是否为指针?要解决这个问题,要用一个巧妙的方法,先回顾一下相关知识点:C++中仍然支持C语言中的可变参数函数C++编译器的函数匹配调用优先级 重载函数函数模板可变参数函数Tip: 如果同时存在普通函数和其重载版本、模板函数、可变参数函数,编译器会优先调用普通函数和其重载版本,然后依次时模板函数和可变参数函数!示例:#include <cstdlib>#i原创 2015-08-28 10:44:16 · 673 阅读 · 0 评论 -
【十九】一些实际工程中的问题
1、Bug在实际工程中内存操作是bug的重要来源C++将堆内存交由开发人员自由使用,因此 未及时释放,将产生内存泄漏重复释放同一段内存,行为未知使用越界,操作了不属于自己的内存思考: 怎样最大限度的避开上述的使用问题?2、数组类 内存越界的问题常发生于数组的使用中 解决方案:数组类工程中,在非特殊情况下,要求开发者使用预先编写的数组类对象代替C++语言中的原生数组,而其实C++中也原创 2015-08-27 12:17:49 · 718 阅读 · 0 评论 -
【十八】类模板(下)
本篇接着上一篇的内容介绍!1、类模板多个类型参数和函数模板一样,一个类模板也可以定义多个类型参数! 如下:#include <iostream>using namespace std;template <typename T1, typename T2>class Test{public: void test(T1 a, T2 b) { cout << static_cas原创 2015-08-26 16:42:12 · 602 阅读 · 0 评论 -
【十】类的静态成员
1、类的静态成员在C++中可以定义静态成员变量和静态成员函数静态成员属于整个类所有,不需要依赖任何对象,会在全局数据区分配空间静态成员可以是public、private和protected的可以在类外,通过类名或者对象名直接访问public静态成员不可以在类外,访问private或protected静态成员类的成员函数不用通过作用域运算符,就可以直接访问静态成员变量 2、静态原创 2015-08-23 16:36:59 · 674 阅读 · 0 评论 -
【九】面向对象的相关概念
目录目录1基本概念2C中类的封装3构造函数4初始化列表5类中的const成员6初始化与赋值7析构函数8构造与析构的调用顺序1、基本概念 类和对象的基本概念“类”指的是一类事物,是一个抽象的概念“对象”指的是属于某个类的一个实体,是一个具体存在的事物 Tip: 类是一种“模板”,可以通过这种模板创建出不同的对象“实例” 对象“实例”是类“模板”的一个具体实现原创 2015-08-19 11:40:16 · 614 阅读 · 0 评论 -
【十二】初探继承
1、继承概念面向对象中的继承指类之间的父子关系子类拥有父类的所有成员变量和成员函数子类就是一种特殊的父类子类对象可以当作父类对象使用子类可以拥有父类没有的方法和属性示例:class Parent{private: int a;public: Parent() { a = 100; } void print() { cout << "a = "原创 2015-08-24 10:15:25 · 575 阅读 · 0 评论 -
【十三】继承中的构造与析构
1、赋值兼容性原则子类对象可以当作父类对象使用子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象所以,在上一篇文章中说: 子类是就是特殊的父类!!!2、继承对象模型类在C++编译器的内部可以理解为结构体 子类是由父类成员叠加子类新成员得到的3、继承和构造与析构思考: 一个从父类继承来的子类在构造时,如何初始化原创 2015-08-24 11:56:42 · 795 阅读 · 0 评论 -
【十五】继承与多态(下)
1、重载和重写思考:重载和重写有什么区别?什么时候是重载,什么时候是重写?函数重载 必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被覆盖重载是在编译期间根据参数类型和个数决定调用函数函数重写 必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态多态是在运行期间根据具体对象的类型决定调用函数举例: 假如有如下两个类:原创 2015-08-24 17:14:46 · 645 阅读 · 0 评论 -
【十四】继承与多态(上)
1、函数重写上一篇文章中说到,当子类定义一个与父类同名的成员变量时,父类的该成员变量依然会被继承到子类,它们两者可通过作用域限定符来区分,那么,如果子类中定义了和父类相同类型且同名的函数又会怎样呢?这就是函数重写!在子类中定义与父类中原型相同的函数函数重写只发生在父类与子类之间#include <cstdlib>#include <iostream>using namespace std;c原创 2015-08-24 15:11:46 · 633 阅读 · 0 评论 -
【十六】函数模板
1、引入泛型编程在以前C语言中,如果一个函数要处理不同的数据类型,那么需要为每种数据类型都定义一个函数实行,例如下面的函数:void Swap(int& a, int& b){ int temp = a; a = b; b = temp;}void Swap(char& a, char& b){ char temp = a; a = b; b = temp;}void原创 2015-08-25 17:08:38 · 549 阅读 · 0 评论 -
【十七】类模板(上)
1、引入类模板C++中可以将模板的思想应用于类,使得类可以不关注具体操作的数据类型,而只关注类所需要实现的功能。C++中的类模板提供一种特殊的类以相同的行为处理不同的类型在类声明前使用template进行标识< typename T> 用于说明类中使用的泛指类型 T在模板类外部定义成员函数的实现时,需要加上template < typename T>的声明,并且类作用域为:classname原创 2015-08-26 11:17:23 · 553 阅读 · 0 评论 -
【十一】运算符重载(下)
1、回顾上一节 上一节中,我们通过了两个全局友元函数进行了运算符重载,并且简单说明了如何进行类成员函数的运算符重载,这里首先将全局重载函数改写为成员重载函数!示例:#include using namespace std;class Complex{private: int a; int b;public: Complex(int i = 0, in原创 2015-08-23 09:54:16 · 736 阅读 · 0 评论