C++魔法(语法)
猛敲代码
搜索
展开
-
c++中静态成员变量要在类外部再定义,否则产生link2001错误
c++中静态成员变量要在类外部再定义,否则产生link2001错误.class testClass{ public: static int m_i;};// 类外部定义,若不写会产生// error LNK2001: unresolved external symbol "public: static int testClass::m_i" (?m_i@te原创 2017-01-01 20:58:37 · 337 阅读 · 0 评论 -
new 和内存四区的 交情
/*new 借助了朋友str的帮助,即使朋友str的地方特别小装不下,new的变量,也不会报错。因此自己要考虑内存溢出的问题.*///char str[3] = { 0 };//分配在静态区void main(){ char str[3] = { 0 };//分配在栈区 //char *str = new char[3]{ 0 };//分配在堆区 int *p1 = new原创 2017-01-01 19:56:15 · 289 阅读 · 0 评论 -
QTreeWidget
方法封装和connect(ui.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(treeItemChanged(QTreeWidgetItem*, int)));void initQTreeWidgetItem(QTreeWidgetItem *item, QString str, Qt::ItemFlag原创 2017-02-17 10:37:02 · 570 阅读 · 0 评论 -
C++方法后加const
在C++的类定义里面,可以看到类似下面的定义:01class List {02private:03 Node * p_head;04 int length;原创 2017-01-21 16:22:20 · 819 阅读 · 0 评论 -
多字节字符与宽字节字符
多字节字符与宽字节字符char与wchar_t我们知道C++基本数据类型中表示字符的有两种:char、wchar_t。 char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’中’)用3个char(三个字节)表示,看下面的例子。void Te转载 2017-01-21 17:11:06 · 642 阅读 · 0 评论 -
拷贝构造和赋值重载,移动拷贝,赋值拷贝
1构造函数:如果类中定义的构造函数或者拷贝构造或者移动构造其中一个,都会导致默认构造函数失效,使默认构造函数生效的代码为:构造函数=defalt 。构造函数和移动构造的关联:若定义了移动构造,在对象赋值或者赋值结束后马上要销毁时,会优先调用移动构造和移动赋值,若类没有定义移动构造和移动赋值,则会调用拷贝构造或者赋值重载函数(效率低)。2拷贝构造函数:调用拷贝构造函数:函数或者一个方法原创 2017-02-15 17:52:57 · 474 阅读 · 0 评论 -
输出操作算子
//输出操作算子//cout//cout//cout//cout.precision(5);设置有效数字//cout//cout//cout.imbue(locale("french_france"));科学计数法显示//cout.imbue(locale(""));3位一个逗号分隔原创 2017-02-15 17:53:47 · 301 阅读 · 0 评论 -
vs快捷键 switch tab tab enter 自动填充枚举类型
先switch然后两下tab会补完到default,光标显示在switch后的变量这时输入枚举,输完后回车,补完所有枚举的case原创 2017-03-10 17:58:43 · 4699 阅读 · 3 评论 -
error:LNK2005 已经在*.obj中定义
为什么会出现这个错误??“error LNK2005: 已经在*.obj中定义” 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形成的原因,就可以轻松解决它了。 造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量。可能存在两种情况: A、对于一些初学编程的程序员,有时候会以为需要使用转载 2017-03-16 09:27:48 · 1556 阅读 · 0 评论 -
delete 和 delete[]
delete 和 delete[] 对于基本数据类型的效果一致。重点讨论复杂数据类型:Test *pTest(new Test());delete[] pTest;//触发异常,单个堆上的对象不能用[].Test *pTest(new Test()[10]);delte pTest;只会调用一次析构函数.原创 2017-01-01 19:20:25 · 384 阅读 · 0 评论 -
malloc free 与 new delelte的区别
对于基本数据类型 malloc free 和 new delete 的效果一样,有一点不同 free (p); delete p free 不改变p的值,delete 改变p的值,指向了一个特殊位置p=0X08123;因此为了避免迷途指针,释放的指针应设定为nullptr;malloc free 对于复杂数据类型class struct 他们不会调用构造和析构函数。从原创 2017-01-01 14:24:22 · 512 阅读 · 0 评论 -
引用3
函数指针引用getp(p)("mspaint");函数调用如何理解:调用函数返回值(返回值是一个函数指针)的函数。getp 调用的函数名 p 函数参数 (“mspaint”)因为getp的返回值是一个函数指针,因此 它是调用返回的函数的参数。说明引用的本质是指针的两种情况int *getp(){int a =5;return &a;//worning 返原创 2017-01-01 11:56:55 · 214 阅读 · 0 评论 -
new delete的局部重载
类的内部重载new delete 监管new delete (实现单例模式,统计次数,避免反复delete异常)。每一个默认的类都有new delete。#include using namespace std;class Test{public: static int numTest; static Test* pTest; Test() { } st原创 2017-01-01 21:03:30 · 508 阅读 · 0 评论 -
C++引用(左值引用,右值引用)
特点:引用:引用本质指针实现。引用一旦初始化, 不会引用其他变量。 右值引用目的:快速创建寄存器数据的引用,就是还没有内存实体的数据可以立即创建一个引用。(一般写模板函数有一个左值引用的模板函数,都会对应一个右值引用的模板函数,即使实现代码是相同的。)左值:有内存实体右值:寄存器的值move()把左值当做右值。事例:引用作为参数:更改参数的内原创 2016-12-24 09:44:03 · 352 阅读 · 0 评论 -
C++引用复杂用法
引用数组:int a[5]{ 1, 2, 3, 4, 5 };//一维数组int (&ra)[5](a);//int ra[5](a);同类型 前面加一个& 记得优先级要加() int (&ra)[5](a);//一维指针数组 int *pa[5]{ a,a + 1,a + 2,a + 3,a + 4 }; int *(&rpa)[5](pa);void main3()原创 2016-12-24 10:58:16 · 255 阅读 · 0 评论 -
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面原创 2016-12-09 12:13:10 · 584 阅读 · 0 评论 -
【Debug】GetVersionEx被声明为已否决
背景:在vs2013中使用GetVersionEx时,编译提示:error C4996 : 'GetVersionExW' : 被声明为已否决解决办法:1、项目 >> 属性 >> C / C++ >> 常规 >> sdl检查,选择“否”2、项目 >> 属性 C++ >> 预处理 中加入 _CRT_SECURE_NO_WARNINGS3、#pragmawarning(转载 2016-12-27 11:32:53 · 700 阅读 · 0 评论 -
基数排序之定长字典排序
#include #include using namespace std;typedef int * pInt;typedef queue Bucket;/* 定长的字典排序 输入: A:待排序的整数序列的数组。每个元素是一个整数序列,按照这些整数字典排序 n:整数序列的个数 k:整数序列的长度 m:整数序列中的每个整数范围从0到m-1 输出:A是已经排序原创 2017-01-05 15:13:47 · 360 阅读 · 0 评论 -
C与CPP的同与不同
一struct info{ int id; int num;};void main(){ struct info infos[4]{ {1, 1}, { 1, 2 }, { 1, 3 }, { 1, 4 } }; for (auto var :infos) { cout << var.id<<var .num<<endl; }//在栈上初始化没问题 struct原创 2017-01-01 12:35:50 · 384 阅读 · 0 评论 -
C++中的函数重复定义问题
本人注释:头文件中直接写函数实现会出现重复定义的错误,但是如果是在类中直接写函数实现就不会出现此错误,原因是两个cpp都包含该头文件,相当于头文件中的同一个函数实现被编译了两次,那么就出现了二义性问题,即调用该函数的地方不知道应该使用哪个函数实现.类中写函数实现就没这个问题,因为会被当成inline函数处理.另外,这与函数重载不一样,函数重载由于特征标的存在编译器能够区分调用哪个实现,其实相当于两...转载 2018-07-02 19:57:39 · 5743 阅读 · 2 评论