c/c++
Lawrence_121
千里之行,始于足下
展开
-
区分内存分配的方式
导言: 在c++的世界里,“烫”和“屯”是我们遇到最多的两个汉字(限于vc用户)。为什么呢? 答案:在vc里,栈空间未初始化的字符默认是-52,补码是0xCC。两个0xCC,即0xCCCC在GBK编码中就是“烫”;堆空间未初始化的字符默认是-51,两个-51在GBK编码中就是“屯”。二者都是未初始化的内存。关于内存的分配方式: 内存被分成了6个区:代码区,...原创 2018-04-27 18:10:23 · 267 阅读 · 0 评论 -
static变量的作用
在C语言中,关键字static的意思是静态的,有3个明显的作用:1. 在函数体内,静态变量具有记忆作用,即一个被声明为静态的变量在这一函数被调用的过程中其值维持不变。2. 在模块内(但在函数体外),它的作用域范围是有限制的,如果一个变量被声明为静态的,那么该变量可以被模块内所有的函数访问,但不能被模块外的其他函数访问。3. 内部函数应该在当前源文件中说明和定义,对于可在当前源文件以外使...原创 2018-09-03 14:05:42 · 1789 阅读 · 0 评论 -
c++的默认拷贝构造函数,从深度拷贝和浅拷贝说起
1. c++类的默认拷贝构造函数的弊端c++类的中有两个特殊的构造函数,(1)无参构造函数,(2)拷贝构造函数。它们的特殊之处在于: (1)当类中没有定义任何构造函数时,编译器会默认提供一个无参构造函数且其函数体为空; (2)当类中没有定义拷贝构造函数时,编译器会默认提供一个拷贝构造函数,进行成员变量之间的拷贝。(这个拷贝操作是浅拷贝)这里只讲拷贝构造函数。在c语言中:i...转载 2018-09-09 09:36:15 · 2855 阅读 · 0 评论 -
关于c++ 的静态成员变量为什么一定要初始化
我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。可以通过以下几个例子更形象的说明这个问题:#inc...转载 2018-09-06 20:35:28 · 2522 阅读 · 0 评论 -
关于一个文件中的全局变量在其他文件中的使用
错误:多重定义 和 xxx变量已经在xxx.obj中定义 当在一个.cpp文件中定义了一个全局变量之后,需要在其他文件中使用时,需要用到关键字extern当使用extern修饰一个变量时,例如extern int x; 代表当前变量x 的定义来自于其他文件,当进行编译时,会去其他文件里面找,在当前文件仅做声明,而不是重新定义一个新的变量main.cpp#include...转载 2018-09-16 22:33:53 · 15337 阅读 · 5 评论 -
大小写不敏感的字符串类(类模板char_traits的应用)
分析: 对于两个string对象的比较,归根结底将会调用模板参数traits中的字符比较函数,正是这些字符比较函数确定了两个字符串的比较规则。类string使用标准库中定义的char_traits<char>作为模板参数traits来实例化basic_string.由于char_traits<char>采用大小写敏感的规则来比较,因此类string也会采用大...原创 2018-12-05 09:55:11 · 1708 阅读 · 1 评论 -
面向对象三个特性五大原则
面向对象的三大特性是"封装、"多态"、"继承",五大原则是"单一职责原则"、"开放封闭原则"、"里氏替换原则"、"依赖倒置原则"、"接口分离原则"。什么是面向对象面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结转载 2018-12-03 15:28:16 · 285 阅读 · 0 评论 -
尽量不要在.h中引入其他头文件
1.用@class 做类的前置声明,尽量延迟头文件的导入时机,减少编译时间, 在.cpp中导入头文件,降低类之间的耦合。2.双方同时需要导入对方头文件,一个导入头文件、一个用@class。避免循环引用,导致编译错误。3.无法使用类的前置声明,那就“class-continuation 分类”。eg:#.h文件//相当于控制器#include <QThread>#in...转载 2018-12-12 10:28:55 · 1257 阅读 · 0 评论 -
关于C语言读取文件时候多读一行
关于C语言读取文件时候多读一行梗概:为什么C语言读取文件到结构体时为什么整天多读一行?一切都是【!feof(fp)】的错!!! while (!feof(fp)) { fgets(buffer, 256, fp); j++; }像这样的代码,是很多C语言学者经常犯的错误!!feof()这个函数是用来判断指针是否已经到达文件尾部的。...转载 2019-03-12 16:17:08 · 2268 阅读 · 0 评论 -
赋值运算符重载函数(operator=)引发的问题
目录背景:正文:1、举例2、参数解析:3、返回值4、调用时机5、提供默认赋值运算符重载函数的时机6、构造函数还是赋值运算符重载函数7、显式提供赋值运算符重载函数的时机8、浅拷贝和深拷贝9、赋值运算符重载函数只能是类的非静态的成员函数10、赋值运算符重载函数...转载 2019-04-13 15:52:43 · 1987 阅读 · 0 评论 -
多态基类的析构函数应该为虚
引出问题:class Person{protected: char *id; char name[32]; int age; public: Person(const char *id,const char *name,int age); Person(); ~Person(); virtual void display(); }; ...原创 2018-09-08 22:48:04 · 240 阅读 · 0 评论 -
拷贝构造函数的参数为什么必须使用引用类型
转自:https://www.cnblogs.com/this-543273659/archive/2011/09/18/2180575.html 在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭...转载 2018-09-05 19:25:09 · 315 阅读 · 0 评论 -
类成员的初始化
类成员的初始化可采用如下两种形式完成:在构造体中赋值完成和用初始化类完成员列表完成,我们先看一下它们各自的形式。class CStudent{public: CStudent(string name,int age,int id); ~CStudent();private: string m_name; int m_age; int m_id;};在构造...原创 2018-05-18 17:23:08 · 1237 阅读 · 0 评论 -
class与struct之间的区别
定义: 在c语言中,struct是一种自定义的数据类型。它是由若干的“成员”组成的。每一个成员可以是一个基本数据类型或是一个用户自定义类型。其一般的定义形式为:struct 结构名{ 成员表列}; 既然struct是一种数据类型,那么就肯定不能定义函数,所以在面向过程的c中,struct不含任何函数。但是当struct进入面向对象的c++新时代时,其特性有了新的发展...原创 2018-05-19 10:39:46 · 1106 阅读 · 0 评论 -
char字符转换成int整形,字符串与整型之间的互相转换
将字符char类型转换为int整型//将字符char类型转换成int整型的方法如下: char str_data = '5'; int int_data = (int)(str_data - '0'); cout << int_data << endl;//同样的道理int转换成字符char是利用相反的方向 int data_int = 9; char...原创 2018-05-28 20:34:08 · 20327 阅读 · 0 评论 -
双向链表c++实现
#pragma once//定义结构体指针struct node{ int date; node* prev; node* next;};class doublelinks{public: doublelinks(); ~doublelinks();public: int doublelink_insert(doublelinks* ptr, int position,...转载 2018-06-08 18:07:36 · 5121 阅读 · 0 评论 -
炫酷代码
void init(){ int i, j; for (i = 0; i <= 100; i++) { system("cls"); printf("\n\n\n\n\n\n\t\t\t ---=欢迎进入通讯录系统=---\n\t\t\t\t\t嵌入式SQ1807班\n\t\t\t\t\t 宋强\n"); if (i != 100) { printf(...原创 2018-07-19 20:16:35 · 22587 阅读 · 6 评论 -
c语言实现配重系统(核心排序)
题目大意:某企业生产三种零件,三个零件可合成一种产品,但三个零件的总重量有要求,不能太重也不能太轻。输入50组数据,每组数据包含一个A零件一个B零件一个C零件。输出符合要求的数据格式如下:工号 A零件 工号 B零件 工号 C零件 总重思路: ①先将所有的A零件按从小到大的重量排序,再将所有的B零件按从大到小排序,所得的每个重量都趋于中间值。...原创 2018-07-19 20:45:02 · 380 阅读 · 0 评论 -
malloc,calloc,realloc的区别
内存分配方式:1.静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量,静态变量。2.在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.从堆上分配 程序在运行的时候...转载 2018-07-30 14:52:54 · 196 阅读 · 0 评论 -
c++继承与组合的区别
转自:http://www.cnblogs.com/xiaozz/p/6448250.htmlC++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及到两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概...转载 2018-09-05 11:17:19 · 894 阅读 · 0 评论 -
将模板的声明和定义放置在同一个头文件里
前言 常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。 在自己编写模板类时,我首先遇到的事实却是“传统”编程方法(在*.h文件声明,在*.cpp文件中定义)不能用于模板。于是我花费一些时间来...转载 2018-09-08 20:20:39 · 207 阅读 · 0 评论 -
内存分配的三种方式
1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,亦称动态...转载 2019-04-27 15:49:50 · 6322 阅读 · 0 评论