
C++
xl365t
专注于音视频通话、视频会议、即时通信等
展开
-
C++多态的实现原理
一、类的多态// animal.cpp#include class animal{public: void sleep() { std::cout<<"animal sleep"<<std::endl; } void breathe() { std::cout<<"animal breathe"<<std::endl原创 2017-11-17 19:27:00 · 263 阅读 · 0 评论 -
C++ public、protected、private的权限控制
一、访问权限类的内部成员变量和成员函数之间没有权限控制,都是可以互相访问的。例如:private函数可以访问public函数、protected函数可以访问private变量等等。类的实例变量可以访问public类型、但不能访问protected和private类型成员变量/函数。类的友元函数、友元类可以访问protected和private类型成员变量/函数。二、继承权限派生类的成员函...原创 2019-06-10 14:03:47 · 690 阅读 · 0 评论 -
C++11生成32位/64位随机数(mt19937)
#include <iostream>#include <chrono>#include <random>int main (){ // obtain a seed from the system clock: unsigned seed1 = std::chrono::system_clock::now().time_since_ep...原创 2019-03-26 16:46:05 · 7796 阅读 · 0 评论 -
Linux下jsoncpp的编译与使用
一、cmake编译jsoncpp源码(1)下载jsoncpp源码源码地址:https://github.com/open-source-parsers/jsoncpp/tree/0.y.z(2)解压源码unzip jsoncpp-0.y.z.zipcd jsoncpp-0.y.z(3)使用cmake编译$ mkdir -p build/debug$ cd build/d...原创 2018-09-10 16:10:53 · 8992 阅读 · 3 评论 -
静态库和动态库的编译与使用
一、准备测试代码 建立头文件thirdApi.h及实现thirdApi.cpp,主函数main.cpp。main.cpp中使用头文件#include "thirdApi.h"// thirdApi.hint Add(int a, int b);int Minus(int a, int b);// thirdApi.cpp #include "thirdApi.h"i...原创 2018-09-10 15:32:17 · 200 阅读 · 0 评论 -
C/C++ 宏参数名前加#变为字符串
在宏定义中,宏参数名前加上#表示为一个字符串。#include <stdio.h>#define SET_STRING(str1, str2) \ char outStr1[100] = #str1; \ char outStr2[100] = #str2; \ const char* str = "aabbcc"; \ if (#...原创 2018-08-14 17:38:08 · 7669 阅读 · 0 评论 -
C/C++ extern, static, const, volatile, auto关键字
一、extern关键字* 声明变量/函数是在其他文件中定义的* 在C++文件中调用C方式编译的函数(1)声明变量/函数是在其他文件中定义的。extern int tmp;extern int func(int tmp);A.cpp和B.cpp都定义了全局变量i,分别正常编译都可以通过编译,但进行链接的时候,却出现了错误。$ gcc -E A.cpp -o A.ii ...原创 2018-02-26 20:42:09 · 681 阅读 · 0 评论 -
C++ this指针
一个学生可以有多本书,这些书都是属于这个同学的。如果有很多个同学在一起,那么为了确定他们的书不被混淆,最好的办法就是每个同学在自己的书上写上名字,这样就不会错了。一个对象的多个成员就可以看作是这个对象所拥有的书。在很多个对象中间,为了证明某个成员是自己的,需要给这些成员取上名字,用this指针可以做到这一点。this指针记录了每个对象的内存地址,通过运算符->访问该对象的成员。...原创 2017-11-26 21:55:07 · 169 阅读 · 0 评论 -
C++ 模板用法
模板可以分为两类:一个是函数模板,另一个是类模板。一、函数模板template 返回类型 函数名(参数列表){ 函数体}#include template T getMax(T a, T b){ T result; result = (a > b)? a : b; return (result);}i原创 2017-11-26 17:43:27 · 315 阅读 · 0 评论 -
C++中友元的用法
一、友元函数声明:friend + 函数声明;实现:可以在类外或类内;调用:直接调用。#include class A{ friend void setValue(A &obj);private: int mValue;};void setValue(A &obj){ obj.mValue = 16; std::c原创 2017-11-26 16:12:46 · 329 阅读 · 0 评论 -
c++ new关键字的用法
c++new关键字的用法有1、创建类对象2、隐藏继承于基类的继承成员#include class Test{public: virtual void print(){printf("Base Test print\n");}};class ClassOne:public Test{public: void print(){pr原创 2017-11-24 09:50:41 · 1156 阅读 · 0 评论 -
C++ 如何突破private成员的访问限制
c++中类的private成员对外是不可见的,以下方法可以突破private成员的访问权限。// accessPrivateMember.hclass A{private: int mPrivate; int nPrivate;public: A(): mPrivate(3), nPrivate(4){} template void原创 2017-11-24 09:46:56 · 3906 阅读 · 0 评论 -
C++ new的理解
一、C++中new的三种含义 "new" 是C++的一个关键字,同时也是操作符。C++中的new,至少代表以下三种含义:new operator、operator new、placement new。 (1)new operator就是平时使用的new,例如:使用关键字new在堆上动态创建一个类对象,A *ptr = new A。它实际上做了三件事:获取一块内存空间[operat原创 2017-11-22 20:58:47 · 8758 阅读 · 2 评论 -
如何限制C++类的对象只能建立在堆上或栈上
C++中,类的对象建立分为两种,一种是静态建立,如A a; 另一种是动态建立,如 A *ptr = new A; 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立一个类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步:第一步...原创 2017-11-21 15:31:53 · 1442 阅读 · 0 评论 -
C++ 继承、虚继承、虚函数类内存分配
目录: 一、单个类的大小 二、普通单继承 三、普通多继承 四、虚拟单继承 五、包含虚函数的普通、虚拟混合继承 六、包含虚函数的多重虚拟继承一、单个类的大小 (1)真空类class CNull{};长度:1 内存结构:未知 注:长度其实为0,这个字节作为内容没有意义,可能每次都不一样。 (2)空类class CNull2{public: void foo(){prin原创 2017-11-20 20:21:51 · 664 阅读 · 0 评论 -
C++ STL 迭代器失效问题的剖析
STL中容器分为顺序容器和关联容器,顺序容器有:vector、deque、list;关联容器有:set、map、multiset、multimap。一、vector、deque、list容器在vector、deque、list 中遍历删除某些元素时可以使用下面方式(1)正确用法1通过erase方法的返回值来获取下一个元素的位置。std::vector Vec;std::vec原创 2017-11-19 17:14:07 · 1186 阅读 · 0 评论 -
C++ 内存分区
在C++中,内存分成5个区,堆、栈、自由存储区、全局/静态存储区、常量存储区栈:由编译器在需要的时候分配,不需要的时候自动清除。里面的变量通常是局部变量、函数参数等。堆:new和delete来申请和释放。自由存储区:由malloc和free来申请和释放。全局/静态存储区:全局变量和静态变量被分配到同一块内存中,C语言中全局变量又分为初始化的和未初始化的,C++中不区分,他们共同占用同一块内...原创 2019-06-10 20:54:58 · 266 阅读 · 0 评论