继承语法
摘要:减少代码的重复 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class BasePage { public: void Header() { cout << "公共头部" << endl; } };
阅读全文
运算符和结合性
摘要:1. 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算符 -表达式 右到左 单目
阅读全文
符号重载总结
摘要:l =, [], () 和 -> 操作符只能通过成员函数进行重载 l << 和 >>只能通过全局函数配合友元函数进行重载 l 不要重载 && 和 || 操作符,因为无法实现短路规则
阅读全文
函数调用运算符()重载及仿函数概念
摘要:用法一: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; class myPrint { public: //()重载 void operator()(string
阅读全文
关系运算符重载(==和!=)
摘要:1. int strcmp(const char *s1, const char *s2); 功能:比较 s1 和 s2 的大小,比较的是不相同的第一个字符ASCII码大小。 参数: s1:字符串1首地址 s2:字符串2首地址 返回值: 相等:0 大于:>0 小于:<0 实例: #define _C
阅读全文
[]运算符重载(数组索引)
摘要:1.1 返回数组索引的引用 1.2 int & operator[](int index) 1.3 return this->pAddress[index] int& operator[](int index) { return this->p_Address[index]; }
阅读全文
赋值运算符重载
摘要:一个类默认创建时 默认构造、析构、拷贝构造和operator=赋值运算符重载(浅拷贝) 进行简单的值传递 1.1 系统默认给类提供 赋值运算符写法 是简单值拷贝 1.2 导致如果类中有指向堆区的指针,就可能出现深浅拷贝的问题 #define _CRT_SECURE_NO_WARNINGS #incl
阅读全文
智能指针的实现(指针运算符重载)
摘要:智能指针的实现 Person类有showAge 成员函数 如果new出来的Person对象,就要让程序员自觉的去释放 delete 有了智能指针,让智能指针托管这个Person对象,对象的释放就不用操心了,让智能指针管理 为了让智能指针想普通的Person*指针一样使用 就要重载 -> 和* #de
阅读全文
前置后置运算符重载
摘要:前置和后置自增 自己实现int类型 MyInteger 内部维护以int数据 MyInteger myInt myInt ++ 后置 ++myInt 前置 重载++运算符 operator++() 前置 operator++(int) 后置 前置理念 先++ 后返回自身 后置理念 先保存住原有值 内
阅读全文
重载左移运算符并作为友元函数
摘要:不要随意乱用符号重载 内置数据类型 的运算符不可以重载 cout << 直接对Person自定义数据类型 进行输出 写到全局函数中 ostream& operator<< ( ostream & cout, Person & p1 ) {} #define _CRT_SECURE_NO_WARNIN
阅读全文
运算符重载
摘要:加号运算符重载 如果想让自定义数据类型 进行+运算,那么就需要重载 + 运算符 在成员函数 或者 全局函数里 重写一个+运算符的函数 函数名 operator+ () {} 运算符重载 也可以提供多个版本 #define _CRT_SECURE_NO_WARNINGS #include <iostr
阅读全文
成员函数做友元函数
摘要:成员函数做友元函数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; //只让Visit可以作为友元函数 Visit2不可以 class House; //先声明,防止
阅读全文
类做友元类,类内声明,类外实现
摘要:友元语法 friend关键字只出现在声明处 其他类、类成员函数、全局函数都可声明为友元 友元函数不是类的成员,不带this指针 友元函数可访问对象任意成员属性,包括私有属性 友元类 friend class 类名 友元类 是单向,不可传递的 #define _CRT_SECURE_NO_WARNIN
阅读全文
友元函数 friend
摘要:全局函数做友元函数 全局函数写到类中做声明 并且使用友元函数关键字friend 实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; class House { fr
阅读全文
mutable关键字
摘要:需要修改常函数里的数值,需要加上mutable关键字 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Person { public: Person() { //构造中修改属性 //this
阅读全文
const修饰成员函数(常函数 )和常对象
摘要:常函数 void func() const {} 常函数 修饰是this指针 const Type * const this, 不能修改this指针指向的值 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std
阅读全文
空指针访问成员函数
摘要:如果成员函数没有用到this,那么空指针可以直接访问 如果成员函数用的this指针,就要注意,可以加if判断,如果this为NULL就return, 否则直接报错 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace
阅读全文
链式编程和this的使用
摘要:this指针的使用 指针永远指向当前对象 解决命名冲突 *this 指向对象本体 非静态的成员函数才有this指针 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Person { publ
阅读全文
指定内存对齐
摘要:链接:https://www.jianshu.com/p/d994731f658d #pragma pack() 1.#pragma简述: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一
阅读全文
面向对象模型初探
摘要:成员变量和函数的存储 c++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样的呢? “数据”和“处理数据的操作(函数)”是分开存储的。 c++中的非静态数据成员直接内含在类对象中,就像c struct一样。 成员函数(member function)虽然内含在class声明之内,却不出
阅读全文