
C++语言编程
Engineer-Bruce_Yang
本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。
-
原创 C++命名空间
C++命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。例如: namespace name //指定命名空间为name接下来我们直接上代码:#include int a = 30 ; //声明一个HotDog名字空间namespace HotDog2016-02-16 12:34:53790
0
-
原创 函数指针数组
今天来介绍一个开发者常用的知识点, 函数指针数组。 这是个什么东西?初学者看到可能就会懵了,又是指针又是数组,还有函数?指针一个就够呛了,还搞这么多。不怕,容我慢慢道来。 首先,咱们先弄明白一个概念性的问题。函数指针数组到底是什么?函数指针数组,也就是说数组里面,有一个函数指针,指向了一个函数的首地址。函数指针在上节中也已经剖析过了,接下来看看如何来使用它吧。1、 函数指针数组的定义 数据类型 (2016-11-16 19:54:111176
0
-
转载 .cc和.cpp的区别
This caused a few problems the first time C++ was ported to a system where case wasn't significant in the filename, however, and different users adopted different solutions: .cc, .cpp, .cxx and possib2017-01-05 10:31:5211572
0
-
原创 POSIX线程同步
在posix编程中,如果在不同的线程中几乎同一时间操作同一个变量的时候,就会出现不同步。如何解决这样的问题,这里需要用到互斥量,互斥锁的概念。请看UNIX环境高级编程P299页#include #include #include //线程1 void *thread_func1(void *arg);//线程2 void *thread_func2(void *arg);pthrea2017-07-10 16:46:32745
0
-
原创 C++复制构造函数的实现
复制构造函数是一种特殊的构造函数,有一般构造函数的特性。它的功能是用一个已知的对象来初始化一个被创建的同类对象。复制构造函数的参数传递方式必须按引用来进行传递,请看实例:#include #include using namespace std ; class Student { private : char name[8]; int age ; char sex ;2017-07-11 10:51:26597
0
-
原创 C++静态数据成员实现
静态数据成员是在一个类中用关键字static声明的数据成员。在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享。C和C++的全局变量有一定的局限性,可以任意被修改,也容易和其它的变量名冲突,故在C++中,一般不使用全局变量。静态数据成员必须进行初始化,初始化应在类体外进行,静态数据成员也可以引用,但不能引用私有数据部分。接下来看一个例子:#include #include us2017-07-11 11:45:27699
0
-
原创 C++友元函数实现
友元函数是一种特殊的函数,它必须要在类中进行声明,但其本身并不是类的成员函数,但友元函数可以访问类的私有成员变量。友元函数的好处:1、实现类之间的数据共享2、提高程序运行效率,方便编程友元函数的坏处:1、破坏数据的隐蔽性和类的封装性2、降低了程序的可维护性所有,友元函数应当谨慎的去使用它。实例:#include #include using namespace std ; class Stu2017-07-11 12:00:101594
0
-
原创 C++友元类实现
C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元。当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员。请看实例:#include #include using namespace std ;//声明教师类 class Techer ;//学生类 class Student { private2017-07-11 13:48:223856
1
-
原创 C++纯虚函数实现
纯虚函数就是一个在基类中的虚函数,差别只是在一般的虚函数声明的后面加了“=0”,虚函数允许函数通过与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,称为运行时的多态性,虚函数是可以有具体实现代码的。那么,为什么要有纯虚函数?在基类中的函数只有说明而没有具体定义的时候,不执行有意义的操作,也没有具体去实现代码,于是在派生类(也就是子类)中就可以实现具体的操作,无论是单继承也好...2017-07-11 15:23:02861
0
-
原创 C++抽象类的实现
1、什么是抽象类?答:简单的说,抽象类就是至少有一个纯虚函数的类。2、抽象类的作用?答:抽象类的主要作用就是为它所组织的继承层次结构提供一个公共的基类,这样它就具有公有行为的特征,其它派生的类可以从这个公共的基类中继承和实现接口,通过抽象类多态的使用其中的成员函数。抽象类案例:#include <iostream>#include <cstring>...2017-07-11 15:45:55737
0
-
原创 C++函数模版实现
若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,那么就可以把这个程序改写成为模版,模版可以让程序对任何其他数据类型进行同样方式的处理。本节主要是说一下C++的函数模版,函数模版的定义一般形式是:template 返回类型 函数名(形参){ //函数实现}看一个实例:#include #include using namespace std;//2017-07-11 17:46:19729
2
-
原创 C++中对C语言结构体用法的扩充
最近在学习C++,了解到,C++中对C做了扩充,使用结构体时也可以像类一样,规定私有数据类型和公有数据类型,同时也可以在struct中实现方法设置等等。但为了保持面对对象的特性,建议还是使用class来描述一个类。案例如下:#include #include using namespace std ;typedef struct student { private : int a ,2017-07-04 14:58:18619
0
-
原创 C++使用初始化列表的方式来初始化字段
几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式:下面这个是Recovery的一个构造函数,代码位于:screen_ui.cpp,它的类的实现在screen_ui.h,这个两个文件今天晚上回家在放上来。ScreenRecoveryUI::ScreenRecoveryUI() :2017-07-04 15:27:042367
2
-
原创 C++构造函数可向父类或者本类传参
在C++的构造函数中,子类继承父类,那么,在创建一个子类成员时,可以同时向父类或者子类的构造函数进行传参,实现方法如下:写一个例子:mul_argc.c#include #include using namespace std ; //英雄联盟类 class Hero{ private : int blood ; string name ; public : Hero(int2017-08-13 18:23:442015
0
-
原创 C++容器操作基础
容器很有用,其实就可以把它当作数组来使用,并且C++的容器封装了很多实用的操作方法,我们可以将它应用在不同的地方。下面看一个实例,编写代码的平台基于QT应用程序控制台版本,代码如下:#include <QCoreApplication>#include <iostream>#include <iterator>#include <vector>...2018-05-01 23:41:28296
2
-
原创 C++函数模版与重载的区别
先来看一个例子:#include <iostream>using namespace std ;//C++函数模版两种定义方式 //template < typename T> 或 template <class T>template <typename T1> T1 check_max(T1 x, T1 y);template ...2018-05-03 16:46:296218
2
-
原创 将二进制转换为其它进制(这里转化为16进制,其它自己尝试)
代码很简单,看看就懂了,没什么好说的,就是一些位操作。#include #define LongToBin(n) \( \((n >> 21) & 0x80) | \((n >> 18) & 0x40) | \((n >> 15) & 0x20) | \((n >> 12) & 0x10) | \((n >> 9) & 0x08) | \((n2016-10-06 17:26:371688
0
-
原创 算法精解:最长公共子序列
最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。 其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列, 且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 而最长公共子串(要求连续)和最长公共子序列是不同的 设序列 X 存储在数组 x[m]中,序列 Y 存储在数组 y[n]中, 二维数组 L[m+1][n+1] 存储最长公2016-06-29 10:31:271432
0
-
原创 C++实现双链表
#include using namespace std ;#define NR(x) (sizeof(x)/sizeof(x[0]))class node{ public : int number ; node *next ; node *prev ; void Init_header(node **he2016-05-11 17:05:10871
0
-
原创 C++之标准输入输出
由于在公司,无法上传图片,往后补上。关于C++的标准输入输出,其实就相当于C语言的scanf和printf,只不过C++用cin和cout这样称为流的机制。#include //使用时需包含头文件using namespace std ; int main(void){ int a = 255 ; //cout 相当于 C语言中的printf //以16进制输出//2016-02-16 12:42:341523
0
-
原创 C++之引用
#include using namespace std ; //&:引用符 : 引用就是对象本身,不要认为引用是指向对象的指针,是该对象的副本。 /*引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标2016-02-16 13:24:26733
0
-
原创 C++之默认参数
C++可以为不指定参数提供默认值。一旦给一个参数赋了默认值,后面的所有参数,也都必须为默认值,并且默认值的类型也必须正确,默认值可以在原型或者函数定义中给出,但是不能两个位置同时给出。 接下来我们上代码:#include using namespace std ; //1>如果参数a,b没有被指定,那么默认参数为a=100,b=100int add(int a = 102016-02-16 13:35:17820
0
-
原创 C++之函数重载
函数重载:1、具有相同的名称,执行基本相同的操作,但是使用不同的参数列表。2、函数具有多态性。3、编译器通过调用时参数的个数和类型确定调用重载函数的哪个定义。4、只有对不同的数据集完成基本相同任务的函数才应重载。函数重载的优 点1、不必使用不同的函数名2、有助于理解和调试代码3、易于维护代码接下来直接上代码:#include using namesp2016-02-16 13:43:02871
0
-
原创 C++语言之动态内存分配
在C语言中,我们熟悉的内存分配与释放的最常用的接口分别是malloc , free 。在C++中: 存在着更加方便的动态存储分配:1、new 和delete 机制,new 它能更可靠控制存储区的分配,C++ 用delete 释放new 运算符申请的存储区。2、new 分配空间时, 如果是对象, 自动调用构造函数。3、new [] 表示分配一个动态数组, 要跟delete []2016-02-16 14:00:42689
0
-
原创 C++语言之类class
在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象:矩形、雇用记录、视频剪辑等。可以利用这些对象的相同特征为它们建立一个集合。而这个集合就称为类。类是定义同一类所有对象的变量和方法的蓝图或原型。例如,可以建立一个定义包含当前档位等实例变量的自行车类。这个类也定义和提供了实例方法(变档、刹车)的实现。实例变量的值由类2016-02-16 22:14:133023
0
-
原创 C++语言之析构函数与构造函数
#include using namespace std ; class Dog{ //默认情况下定义变量为私有 int a ; public: //两个函数都只能自动调用,不能被人为手动调用 //构造函数为公有 //用法: //初始化该类成员变量或者成员方法 //分配空间 Dog(int a ) ; //析构函数 //析构函数没有返回值,不能传2016-03-04 20:54:521506
0
-
原创 C++语言之构造函数
#include using namespace std ; class Cat{ public: char name[20]; void Say_Name(void); //构造函数名字必须跟类名一样 //无返回值,但是可以传参 //调用 不能被调,只能自己运行 //在该类分配空间时自动运行 //支持默认参数,并且可以重载 Cat(const char *2016-03-04 20:57:481380
0
-
原创 C++语言之静态变量的运用
#include using namespace std ; class Banana{ public: static int id ; Banana(void) { id++ ; cout << "this is a test: " << id << endl ; }};//类中的静态变量,必须在全局定义int Banana::id = 0 ;2016-03-04 21:00:331038
0
-
原创 C++之继承
#include using namespace std ; class Animal{ private: int age ; protected: int id ; public: int Height ; void Say_hi(void) { cout << "this is hello" <<endl ; }};//无论哪种2016-03-04 21:04:061171
0
-
原创 C++之多继承
#include using namespace std ; class AA{ public: int a ; void Say_hello(void) { cout << "this is AA " << endl ; }};class BB{ public: int b ; void Say_hello(void) {2016-03-04 21:06:321293
0
-
转载 蒙特卡洛算法
从今天开始要研究Sampling Methods,主要是MCMC算法。本文是开篇文章,先来了解蒙特卡洛算法。 文章转载自:http://blog.csdn.net/acdreamers/article/details/44978591 Contents 1. 蒙特卡洛介绍 2. 蒙特卡洛的应用 3. 蒙特卡洛积分2016-03-18 22:47:563990
0
-
原创 C++之虚函数
#include using namespace std ; class AA { public: int a ; //虚函数 virtual void say_hello(void) { cout << "this is your parent " << endl ; }};class BB : public AA{ public:2016-03-13 22:14:231316
0
-
原创 C++实现二叉树
#include using namespace std ;class Tree{ public : int number ; class Tree *left ; class Tree *right ; void insert_tree(class Tree **header , int number) ;2016-05-11 16:00:511202
0
-
原创 C++数据结构相关库的使用(栈与队列)
C语言实现的栈和队列需要我们自己手动去实现,以前写过类似的博文,这里就不再重复。博客链接如下:栈的C语言实现:https://blog.csdn.net/morixinguan/article/details/50507124队列的C语言实现:https://blog.csdn.net/morixinguan/article/details/51374296但C++已经提供了相关的类给我们进行操作...2018-04-27 23:55:35585
0