
C++知识库
文章平均质量分 69
liuguangsh
这个作者很懒,什么都没留下…
展开
-
C++基础知识
1:关于 C++ 中 new int() 与 new int[] 的区别。int *a=new int(120); 申请一个整型变量空间,赋初值为120,并定义一个整型指针a指向该地址空间 int *a=new int[120]; 申请120个整型变量空间,没有赋初值,并定义一个整型指针a指向该地址空间开始处原创 2016-10-12 16:23:47 · 175 阅读 · 0 评论 -
拷贝构造函数的使用时机
拷贝构造函数使用的时机有:1:类的赋值2:类做为函数的形参而不使用引用时3:类做为函数的返回值#includeusing namespace std;class MyClass06A{ //有默认的拷贝构造函数public: void show() { cout << "x:" << x << " y:" << y << endl; }private:转载 2016-11-08 22:43:56 · 328 阅读 · 0 评论 -
深拷贝
/*默认拷贝构造,对于数据只是值传递,对于指针 ,则指向同一片内存地址类的内部有指针并分配内存的,需要深拷贝,否则浅拷由。深拷贝需要自己手动*/#define _CRT_SECURE_NO_WARNINGS#include#includeusing namespace std;//数据的拷贝是浅拷贝class MyClass{public: int a; int b;转载 2016-11-09 16:10:57 · 514 阅读 · 0 评论 -
类内CONST
/*const 不可以用于构造与析构创建对象的时候加const,是常量对象,无法修改数据,只能引用尾部有 const 的方法类的成员如果是const 初始化有二种方式。一:默认初始化,第二构造初始化,但不可以在构造函数内部初始化类中的const 变量成员,无法直接修改,可以间接修改类成员函数,返回值是const饰的,返回是常量。参数是const修饰的,参数只可读不可写。尾部是cons转载 2016-11-09 16:34:04 · 1119 阅读 · 0 评论 -
static
/* 静态成员函数,只能调用静态函数,及静态变量。 静态变量只会初始化一次,变量类中声明 必须初始化 且在类外。如:int MyStu::data = 10; static int data; //类的静态成员不能设置初始值,但可在外部赋值,如:int MyStu::data = 10;*/#includeusing namespace std;class MyStu{pub转载 2016-11-10 13:51:29 · 264 阅读 · 0 评论 -
explicit
/*explicit:只用于构造函数没有explicit下面四种语义都可以:MySoc ms1 = 66; //默认数据转MySoc ms2(99);MySoc ms3 = MySoc(5); MySoc ms4 = (MySoc)5; 上面可以解释为 数据转换、构造、赋值 造成了代码的歧义。有explicit 限定了自动转换。没有 explicit ,代码歧义多,可以解释为构转载 2016-11-10 17:13:38 · 418 阅读 · 0 评论 -
转义字符R
R"()"; 可以处理比如路径中的转义字符,不需要写二个 \\ ,这时只需要使用 R"(c:\path.txt)" 这样即可,详细见下面代码:#include#includeusing namespace std;void main(){ //R"()"; string str = R"(1234\n\tabc)"; cout << str << endl; strin转载 2016-11-01 11:25:27 · 2733 阅读 · 0 评论 -
lambda及函数包装器的使用
lambda 表达式知识:[capture](parameters) mutable ->return-type{statement}1.[capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数。捕捉列表能够捕捉上下文中的变量以供Lambda函数使用; 捕捉列表 中放 & 时为引用外转载 2016-11-02 17:49:39 · 830 阅读 · 0 评论 -
函数返回类对象的各种形式
/* 参数都用引用,不会调用拷贝构造。 返回引用不会调用拷贝构造。 同时,拷贝构造深拷贝,赋值重载深拷贝。 注意对象在栈上,有生命周期,拷贝栈上的对象,需要深拷贝。*/#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;class MyString{public: char *p; int size;转载 2016-11-15 11:21:14 · 903 阅读 · 0 评论 -
获取虚函数表指针
/* 获取虚函数表指针。*/#includeusing namespace std;class Stu{public: virtual void go1() { cout << "走来..." << endl; } virtual void go2() { cout << "跑来..." << endl; } virtual void go3() {转载 2016-11-24 14:39:04 · 1313 阅读 · 0 评论 -
virtual与类的大小
virtual在修饰函数,与修饰继承关系时对类的大小是有区别的,请看下面的代码:virtual 有虚函数表指针,占4个字节。#includeusing namespace std;class Base{};class Base1 :public Base{};class Base2:virtual public Base{};class Base3 :转载 2016-11-24 16:13:08 · 548 阅读 · 0 评论 -
虚函数知识
虚函数调用的几种方式,及虚函数的重载、跨类重载问题。/*虚函数的三种调用方式1:指针2: 引用3:对象(不能实现多态)*/#includeusing namespace std;//继承,默认情况下class是私有继承 struct默认是公有继承//虚函数可以调用成员函数//多态调用依赖于指针 或 引用调用//对象的调用有副本机制,会调用拷贝构造,拷贝一个父类,无法实现转载 2016-11-24 16:59:41 · 348 阅读 · 0 评论 -
访问权限
#includeusing namespace std;//公有: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问//注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数//私有:private 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. //保护:protected 可以被该类中的函数、子类的函数、以及其转载 2016-11-08 16:34:37 · 332 阅读 · 0 评论 -
类成员函数指针
#includeusing namespace std;class MyClass{public: int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int divv(int a, int b) { return a / b; }};// 类转载 2016-11-08 15:55:21 · 617 阅读 · 0 评论 -
C++ delete_new与free_malloc的区别_1
/*总结:delete free 对于基本数据类型,释放二次都会出错。FREE不改变指针的值,delete 会改变值指针的值,使其指向一个固定的地址。创建对象时的区别:new delete 会自动调用 构造和析构函数malloc free 不会自动调用 构造和析构函数*/#include#include#includeusing namespace std;clas转载 2016-10-12 16:25:31 · 243 阅读 · 0 评论 -
函数指针类型与decltype
/*decltype的使用:以下来自百度百科的解释:在C++中,decltype作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。泛型编程在整个1990年代越发流行,对实现类型推导机制的需求也应运而生。为此,许多编译器厂商都基于程序语言现有的功能,自行实现转载 2016-11-03 13:34:37 · 2909 阅读 · 0 评论 -
new分配内存栈堆静态区的区别
#include#includeusing namespace std;//char str[1024] = { 0 }; //内存静态区//静态区,栈区,堆区 //int *p2 = new (str)int[10]{1,2,3,4,5,6,7,8,9,10}; 分配内存,以str地址为开始//堆区,可以覆盖重写 可以删除//栈区,静态区,可以覆盖重写,不可以删除void转载 2016-10-12 22:25:01 · 916 阅读 · 0 评论 -
函数指针与函数模板及函数绑定器
#include#include //函数绑定器using namespace std;using namespace std::placeholders; templatevoid show(T t){ cout << t << endl;}struct MyStruct{ template void show(T t) { cout << t << endl;转载 2016-11-03 16:23:02 · 380 阅读 · 0 评论 -
函数绑定器
函数绑定器不能绑定重载函数,无法识别。 仿函数又叫函数绑定器 主要是把一个类的成员函数当成一个普通函数使用。/* 仿函数又叫函数绑定器 主要是把一个类的成员函数当成一个普通函数使用。 注:绑定时无法进行函数重载。*/#include#includeusing namespace std;using namespace std::placeholders; //占位转载 2016-11-03 16:49:22 · 795 阅读 · 0 评论 -
全局局部new_delete_malloc_free的调用过程分析
/*VS2013: 注意时应该把 把debug 模式换成 releasr 模式下运行,否则会冲突,因为都对内存进行管理。 C++ C语言层 管理内存的区别 C语言层管理内存,管理malloc free 全局 new 局部 new ,都会调用一次构造函数 管理内存即调用局部,又调用全局管理 局部的内内存管理是管理对象的,全局的内存管理是管理基本数据类型 int double...转载 2016-10-13 15:59:29 · 527 阅读 · 0 评论 -
list的使用
#include#includeusing namespace std;//链表的每个元素都是一个listvoid main4d(){ listmylist1{ 5, 3, 2, 9 }; listmylist2{ 1, 23, 5, 2 }; listmylist3{ 11, 123, 15, 12 }; list>mylist{ mylist1, mylist2, myl转载 2016-10-13 16:54:35 · 276 阅读 · 0 评论 -
if_exists的使用
/* 注意 if 前面有二个 _ __if_exists:判断一个标识符存在不存,标识符:变量、函数、类*/#includeusing namespace std;void run(int x){}void main(){ //int num; //__if_exists(num) //注意 if 前面有二个 _ __if_exists(run) { c转载 2016-10-24 16:37:49 · 2503 阅读 · 0 评论 -
ref-引用包装器
/*引用包装器 一般使用在模块中,因为模板一般是不会使用引用的,所以这时可以使用引 引用包装器进行引用。*/#includeusing namespace std;templatevoid show(T t){ t += 9;}void main(){ int data = 10; int &rdata(data); show(rdata); cout <转载 2016-10-24 16:52:19 · 563 阅读 · 0 评论 -
list管理对象
/* 管理类的内存,要通重载 类,函数是共享的,数据是每个对象私有的*/#include#include#includeusing namespace std;class myclass; //类的声明struct info{ myclass *p; //指针,内存首地址(对象的地址) int n; //代表多少个对象。};list myclasslist; /转载 2016-10-17 17:45:18 · 444 阅读 · 2 评论 -
类函数访问
#includeusing namespace std;class MyClass{public: int add(int a, int b) { cout << "call add" << endl; return a + b; }};void main(){ MyClass my1; MyClass *pmy = new MyClass; my1.ad转载 2016-11-08 14:47:25 · 293 阅读 · 0 评论 -
dynamic_cast与typeit及虚函数知识点
/*带虚函数与不带虚函数转换的区别。dynamic_cast:必须要有虚函数才可以转换。dynamic_cast:只能处理转换指针或引用,不能转换对象。dynamic_case 只能识别多态数据类型,转换失败就是null多态,父类指针可以根据多态转化为子类指针子类指针存储一个父类指针,转换失败。指针为 00000子类指针转换成父类,自动转换。typeid:自动识别类型,依赖于虚转载 2016-11-25 10:30:46 · 780 阅读 · 0 评论