c++
文章平均质量分 72
erzr_zhang
这个作者很懒,什么都没留下…
展开
-
Code::Blocks 12.11 error: ‘nullptr’ was not declared in this scope&GNU GCC -std=gnu++0x
C++primer英文版(第五版)p54 Null Pointers章节: Modern C++ programs generally should avoid using NULL and use nullptr instead.本人通俗理解为指针初始化尽量用nullptr而避免用NULL。于是乎用Code::Blocks敲敲代码,问题来了。error: ‘nullptr’ was not de原创 2016-06-28 00:18:45 · 729 阅读 · 0 评论 -
全局变量和静态局部变量有什么区别?
全局变量和静态局部变量有什么区别? 存储的地方是一样的,不同之处在于它们的作用域不同:全局变量基本上在程序的任何地方都能被看到而静态局部变量只能在其指定的范围内被使用比如int i ; // 全局变量class C{public:static int i_C; // 静态局部变量}void main(){i = 1; // 合法原创 2016-10-12 15:20:30 · 658 阅读 · 0 评论 -
[C++]前置声明和头文件
假设有一个Date类Date.h[cpp] view plain copyclass Date { private: int year, month, day; }; 如果有个Task类的定义要用到Date类,有两种写法其一Task1.h[cpp] v转载 2016-10-14 00:27:20 · 290 阅读 · 0 评论 -
C++中,两个头文件互相引用怎么办
两个头文件相互包含会导致超前引用的问题,所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。发生这种情况是无法编译通过的,不过可以采取一些手段解决该问题 超前引用导致的错误有以下几种处理办法: 1) 使用类声明 在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用。其使用方法是: a) 用class ClassB;声原创 2016-10-14 00:29:45 · 2110 阅读 · 0 评论 -
C++类静态成员与类静态成员函数详解
静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态方法就是与该类相关的,转载 2016-12-05 15:37:55 · 704 阅读 · 0 评论 -
new VS malloc
1、new 是c++中的操作符,malloc是c 中的一个函数 2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数 3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。 4、new 和 ma原创 2016-12-20 11:03:38 · 278 阅读 · 0 评论 -
何时发生隐式类型转换
链接:https://www.nowcoder.com/test/question/done?tid=6629168&qid=2922#summary来源:牛客网1. 在混合类型的表达式中,操作数会被转换为相同类型 int ival; double dval;ival >= dval; // ival converted to double2. 条件表原创 2017-02-20 16:27:15 · 842 阅读 · 0 评论 -
深拷贝与浅拷贝
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心得吧。 先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1转载 2017-02-13 11:07:07 · 196 阅读 · 0 评论 -
计算结构体的字节数
结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体: struct stu1 { int i; char c; int j; }; 先介绍一个相关的概念——偏移量。偏移量原创 2017-02-21 21:20:26 · 2292 阅读 · 0 评论 -
《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?
一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。1、静态建立类对象:是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在转载 2017-02-15 16:29:17 · 190 阅读 · 0 评论 -
printf()函数
一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("", ); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输原创 2017-02-15 16:55:29 · 482 阅读 · 0 评论 -
二进制平行算法
接下来开始分析改算法是如何实现二进制表示中1的个数统计的,为了方便理解,我们把代码改成如下的形式:int func(unsigned int i){ unsigned int temp = i; temp = (temp & 0x55555555) + ((temp>> 1) & 0x55555555); //temp相邻位相加 temp = (te原创 2017-02-15 17:29:04 · 745 阅读 · 0 评论 -
C++类和new、delete操作符
在C++中,你可以像定义变量一样来创建对象,如:Student stu; //对象已被实例化,已分配内存空间,可以使用了stu.say(); //调用成员函数这种情况下,系统会在栈区为对象分配内存。栈区是内存中的一块区域,由系统自动分配和释放,程序员无法操控,一般用来存放函数的参数值、局部变量、局部对象等。当发生函数调用时,系统将函数参数、局部变量、局部对象依次原创 2016-09-22 12:32:36 · 354 阅读 · 0 评论 -
const在函数前与函数后的区别
const在函数前与函数后的区别一 const基础 如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500; const int* a = &b; [1] int const *a = &b;原创 2016-10-09 22:02:47 · 322 阅读 · 0 评论 -
C++中的friend友元函数详细解析
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。我们已知道类原创 2016-07-10 01:24:51 · 1099 阅读 · 0 评论 -
运算符重载__ERZE
1. 运算符重载介绍1)之前的函数重载,允许多个同名不同参数类型的函数; 运算符重载允许程序员如何使用运算符(如+、-、==、=和!)来处理不同类型的数据类型; 对于基本数据类型,运算符是可以使用的: 对于自定义数据类型: 如果为对自定义MyString的运算符+定义,会出现编译错误。 当一个运算符重载时,对于C++将会根据数据的类型,选择合适的重载运算符; C++中除了arit转载 2016-07-10 02:01:40 · 361 阅读 · 0 评论 -
K-means算法
算法描述:1> 从N个数据中选出K个元素作为质心,即数据将被分成K簇2> 依次计算剩下的每一个元素到K个元素的相异度,一般是计算距离,将这些元素分别划分到相异度最低的簇中去3> 根据聚类结果分别重新计算k个簇各自的中心,计算方法是取簇中各维度的算术平均值。4> 将D的全部元素按照新的中心重新聚类。5> 重复第四步,直到聚类结果不转载 2016-07-11 19:01:29 · 2562 阅读 · 0 评论 -
C++中typename和class的区别
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template…… 在 这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typen转载 2016-07-13 10:44:42 · 246 阅读 · 0 评论 -
C++中this指针的用法详解
this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例如转载 2016-07-13 19:56:30 · 261 阅读 · 0 评论 -
运算符重载详解
1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进转载 2016-07-13 20:11:48 · 561 阅读 · 0 评论 -
C++ 函数后加const
**1、非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误) 2、表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用); 3、唯一的例外是对于mutable修饰的成员。 加了const的成员函数可以被非const对象和const对象调用原创 2016-07-08 00:56:18 · 315 阅读 · 0 评论 -
const成员函数、const类对象、mutable数据成员
1. const成员函数 只是告诉编译器,表明不修改类对象. 但是并不能阻止程序员可能做到的所有修改动作,比如对指针的修改,编译器可能无法检测到2. 类体外定义的const成员函数,在定义和声明处都需要const修饰符1 class classname 2 { 3 public: 4 classname() {} 5 ~classname();原创 2016-07-08 00:59:15 · 355 阅读 · 0 评论 -
const 和 #define区别
(1) 编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。原创 2016-08-29 21:55:39 · 354 阅读 · 0 评论 -
C++ 常量类型 const 详解
1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 3、cons有什么主要的作用?(1)可以定义const常量,具有不可变性。 例如: const int Max=10转载 2016-08-25 16:15:09 · 965 阅读 · 0 评论 -
C++流概述
C++流概述在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。C++流涉及以下概念:标准I/O流:内存与标准输入输出设备之间信息的传递;文件I/O流:原创 2016-10-09 21:37:34 · 3345 阅读 · 0 评论 -
编程之美:求二进制中1的个数
1.问题描述实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2 2.分析与解法解法1:利用十进制和二进制相互转化的规则,依次除余操作的结果是否为1 代码如下:int Count1(unsigned int v){ int num = 0;原创 2017-02-15 19:02:57 · 322 阅读 · 0 评论