C++
Xing_He1
这个作者很懒,什么都没留下…
展开
-
(this)指针
日期类: class Date { public : void Display () { cout <<_year<< "-" <<_month << "-"<< _day <<endl; cout<<this->_year<&原创 2018-11-16 20:06:05 · 262 阅读 · 0 评论 -
C语言和C++的区别
1.函数的默认参数 C++允许给参数赋默认值,C语言不允许 函数调用的时候会有压栈开销,参数一般是从右向左压参 int sub(int a = 10, int b) //错误 int sub(int a, int b = 10); //正确 注意: int sub(int a, int b = 10); int sub(int a = 10, int b) 这种声明很熟的...原创 2019-04-10 17:07:07 · 939 阅读 · 0 评论 -
类对象大小的计算
class A // 1字节 { public: void PrintA { cout&lt;&lt;_a&lt;&lt;endl; } private: char _a; }; 存储方式: 每个对象都输自己的数据成员 成员函数放在公共代码区域 一个类的大小,实际就是该类中”成员变量”之和 编译器给了空类一个字节来唯一标识这个类。 存储的时候要遵守内存对其原则: 第一个成员在与...原创 2018-11-16 19:54:20 · 379 阅读 · 0 评论 -
struct和class的区别
在C++中class和struct都可以定义类 区别在于: struct成员默认访问方式是public, class的默认成员访问方式是private 上面提到了3个访问限定符 public修饰的成员在类外可以直接被访问 protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问...原创 2018-11-15 11:03:09 · 1056 阅读 · 0 评论 -
指针空值(nullptr)
在C语言中我们只用NULL作为空指针,而在C++中我们使用nullptr作为空指针, void f(int) { cout<<"f(int)"<<endl; } void f(int*) { cout<<"f(int*)"<<endl; } int main() { f(0); //调用第一个 f(NULL); //调用第一个 f((int...原创 2018-11-15 10:54:28 · 600 阅读 · 0 评论 -
auto关键字
定义: auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 int TestAuto() { return 10; } int main() { int a = 10; auto b = a; // int auto c = 'a'; // char auto d = TestAuto(); // int //a...原创 2018-11-15 10:49:35 · 166 阅读 · 0 评论 -
内联()
定义 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。 像宏一样 特性 inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。 inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽...原创 2018-11-15 10:36:38 · 281 阅读 · 0 评论 -
引用(&)
** 引用的定义:** 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 #include<iostream> using namespace std; int main() { int a = 10; int& ra = a; a = 20; //a, ra 都改为20,a,ra的地址一样...原创 2018-11-15 10:31:39 · 526 阅读 · 0 评论 -
函数重载
函数重载的定义: 是函数的一种特殊形式,C++允许在同一作用域中声明几个功能相似的同名函数,这些同名函数的形参列表(参数个数 或类型或顺序)必须不同,常用来处理实现功能相似数据类型不同的问题。 返回值相同 函数名相同 我们需要搞清楚为什么C语言不支持函数重载,而C++支持??? 命名修饰规则 运行需要经过下面4步: 1.预处理:去注释、条件编译、宏替换、头文件的包含 2.编译:生成汇编代码...原创 2018-11-15 09:59:43 · 134 阅读 · 0 评论 -
缺省参数(备胎)
默认缺省参数的定义: 声明或定义函数时为函数的参数指定一个默认值,在调用该函数时, ①如果没有指定实参则采用该默认值, ②否则使用指定的实参 #include<iostream> using namspace std; void TestFunc(int a = 0) { cout<<a<<endl; } int main() { TestFu...原创 2018-11-15 09:07:06 · 173 阅读 · 0 评论 -
输入和输出(cout/ cin)
#include<iostream> using namespace std; int main() { cout<<"Hello world!!!"<<endl; return 0; } cout标准输出(控制台) cin标准输入(键盘) 必须包含头文件#include<iostream>和std标准命名空间 C++的输入输出很方便,不需要格...原创 2018-11-15 08:53:01 · 227 阅读 · 0 评论 -
命名空间
出现的原因: 在C/C++中,变量、函数和类都大量存在,这些变量、函数和类的名称都存在全局作用域中,可能会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。 命名空间的定义: 命名空间用关键字namespace,后面是命名空间的名称,然后又一堆{},{}中的是命名空间成员。 //1.普通命名空间 namespace N1 // N1为命名空间的名称 { // 命...原创 2018-11-15 08:48:18 · 146 阅读 · 0 评论 -
C++的关键字
C++的关键字比C语言要丰富好多 一共63个关键字,比C语言多出一半,C语言一共32个关键字原创 2018-11-15 08:34:13 · 233 阅读 · 0 评论 -
运算符重载
运算符重载 函数原型: 返回值类型 operator操作符(参数列表) 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型或者枚举类型的操作数 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不 能改变其含义 作为类成员的重载函数时,其形参看起来比操作数数目少1成员函数的 操作符有一个默认的形参this,限定为第一个形参 .* 、:: 、...原创 2018-11-16 21:12:12 · 265 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数 只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用 特征 拷贝构造函数是构造函数的一个重载形式 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝(值拷贝),有时候会...原创 2018-11-16 21:05:17 · 216 阅读 · 0 评论 -
构造函数与析构函数
Date类 class Date { private : int _year ; int _month ; int _day ; }; 1.构造函数 定义:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次 特征 函数名与类名相同。 无返回值。 对象实例化时编译器自动调用对应的构造函...原创 2018-11-16 20:49:20 · 341 阅读 · 0 评论 -
malloc的底层实现
内存管理(虚拟内存空间) 每个进程都有一个虚拟内存空间,虚拟内存空间通过MMU(存储器管理单元)映射到真正的物理空间,MMU是一个硬件,利用存储在主存中的查询表翻译虚拟地址,查询表由操作系统管理,用户无法获取。 虚拟地址空间给每个进程一个假象,就像每个进城拥有4G的运行空间一样,但是实际在使用内存的时候,虚拟地址空间通过映射到物理地址空间。 物理内存 已经映射的物理空间有一个break指针,指针...原创 2019-04-09 17:15:52 · 243 阅读 · 0 评论