关系运算符重载(==和!=)
摘要: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声明之内,却不出
阅读全文
单例
摘要:单例实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Singleton { public: static Singleton* Instance() //只提供一个公有化的指针返回 {
阅读全文
静态成员变量
摘要:静态成员变量 在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。 在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成
阅读全文
动态对象创建new运算符
摘要:对象创建 当创建一个c++对象时会发生两件事: 为对象分配内存 调用构造函数来初始化那块内存 第一步我们能保证实现,需要我们确保第二步一定能发生。c++强迫我们这么做是因为使用未初始化的对象是程序出错的一个重要原因 动态分配内存方法 为了在运行时动态分配内存,c在他的标准库中提供了一些函数,mall
阅读全文