地理基础知识-经线与纬线
经线与纬线 01 纬线 每一条纬线都是相互平行的,最长的纬线是赤道。 形状:圆形 指示方向:东西(即:同一根纬线连接东西) 长度变化规律:纬线长度从赤道开始向两极地区逐渐递减。其中,最长的纬线是赤道(其周长约为40000km),其余的纬线沿赤道对称分布,相互对称的纬线长度相等。 南北半球:赤道平分南…
cpp运算符重载-总结
运算符重载-总结 我们现在在一篇笔记中总结一下。 运算符重载是一个建立在类与对象上的关键点。如果没学习到/复习到,建议先把类与对象学习/复习完成后在进行。 在这一篇笔记之中,主要是对知识点、语法的总结。四则运算等部分重载只会写一个用于参考。所以每个实例都回把所使用到的类也写出来。 概念 运算符重载在…
cpp继承总结
08-3 cpp面向对象-继承总结 继承-总结 继承结束了,让我们简单总结一下: 继承中的专有名词: 子类又称之为:派生类。 父类又称之为:基类。 继承的语法 继承的基本语法:class 子类名 :继承方式 父类。 其中,继承可以多继承,即同一个子类继承多个父类。多继承语法是:class 子类 :继…
cpp深拷贝和浅拷贝的总结
08-1 深拷贝和浅拷贝的总结 深拷贝和浅拷贝的出现情况 在类中,且这个类的属性中有指向堆区的地址。 什么情况会出现深拷贝和浅拷贝 属性中有指向堆区的地址的类使用默认拷贝构造函数和默认赋值运算的时候会出现。 如何解决 如果是需要拷贝构造函数,则需要提供一个拷贝构造函数。 如果是对变量进行赋值,则需要…
cpp多态的原理剖析
07-2 多态的原理剖析 我们回到上一篇笔记的例子中:现在创建三个类,Animal、Cat和Dog。分别在各自的类内创建Speak()函数表示说话。之后,创建一个doSpeak()函数表示说话的动物。 我们现在看一下类Animal的占用内存大小: class Animal { public: voi…
cpp多态的使用
07-1 多态的使用 Tips:多态分为静态多态和动态多态,但是在一般情况下,“多态“表示的是动态多态。 现在创建三个类,Animal、Cat和Dog。分别在各自的类内创建Speak()函数表示说话。之后,创建一个doSpeak()函数表示说话的动物。具体如下: #include<iostre…
cpp多态的基本概念
07-0 多态的基本概念 多态是cpp面向对象的三大特性之一 复习:cpp面向对象的三大特性: 封装 继承 多态 多态分为两类: 静态多态:函数重载 和 运算符重载 就属于静态多态,复用函数名。 动态多态:派生类和虚函数实现运行时多态。 复习: 函数重载: 函数重载的简单概念是:在某种特定的条件下,…
cpp菱形继承
06-8 菱形继承 菱形继承的概念:存在着两个派生类(类B和类C)继承同一个基类(类A),同时存在着另外一个类(类D)同时继承这两个派生类。这种继承称之为菱形继承,又称之为钻石继承。 我们可以举个例子,这样可能好理解一点: 有一个父类,叫做动物,这个类下面有两个类,一个类是羊,另外一个类是驼。这个很…
cpp多继承
06-7 继承语法-多继承语法 在之前我们学习过了 c++中的基本继承语法,我们可以复习一下。 复习: c++中,类与对象的继承语法是:class 子类名 :继承方式 父类 其中,有三种继承方式,对应着 c++中类内对象的三种权限: 公共继承(public) 保护继承(protected) 私有继承…
cpp继承同名静态成员处理方式
06-6 继承同名静态成员处理方式 复习: 静态成员:静态成员分为: 静态成员属性(在成员变量前加上ststic) 所有对象共享一份数据; 在编译阶段分配内存(一般的数据存放在栈区) 类内声明,类外初始化 静态成员函数(在成员函数前加上ststic) 所有对象共享同一个函数 静态成员函数只能访问静态…
cpp继承同名成员处理方式
06-5 继承同名成员处理方式 思考:当子类和父类中出现了同名的成员,如何通过子类对象访问父类的同名成员,子类呢? #include <iostream> #include <string> using namespace std; class A { public: str…
cpp继承中构造和析构顺序
06-4 继承中构造和析构顺序 子类在继承父类后,当子类创建对象的时候,也会调用父类的构造函数。 思考:在继承的时候,创建子类对象的时候,是先构造子类对象还是父类对象?析构呢? #include <iostream> using namespace std; class A { publ…
cpp继承中的模型对象模型
06-3 继承中的模型对象模型 思考:从父类继承下来的成员,是否属于子类的对象中呢? 我们可以用sizeof关键字查看一个对象的大小。 我们可以先创建一个父类: class A { public: int m_A; protected: int m_B; private: int m_C; }; 在…
cpp继承方式
06-2 继承方式 在上一章中,我们学习了继承的语法:class 子类名称 :继承方式 父类名称。 继承一共有三种方式 公共继承(public) 保护继承(protected) 私有继承(private) 继承的三种继承方式就是类中成员的三种权限。 我们假设有一个父类A: class A { pub…
cpp继承基本语法
06-1 继承基本语法 继承的基本语法:class 子类名 :继承方式 父类 举个例子: 现在有三种猫: 猫都喜欢:伸懒腰、猫薄荷、喝马桶水 狸花猫:喜欢打架 布偶猫:喜欢装可爱 橘猫:啥都吃。 我们现在使用继承的方法,打印每一种猫喜欢的东西: #include <iostream> u…
cpp继承
06-0 继承 继承是 c++面向对象的三大特性之一。 复习:c++面向对象的三大特性: 封装 继承 多态 有一些类和其他类之间存在特殊关系,比如说: |-动物 |--猫 |---狸花猫 |---布偶猫 |---橘猫 |--狗 |---哈士奇 |---拉布拉多 |---萨摩耶 这些类中,下级的成员除…
cpp运算符重载-逻辑运算符
05-7 运算符重载-逻辑运算符 逻辑运算符包括:逻辑与(&&/and)、逻辑或(||/or)、逻辑否(!)。 可以重载的逻辑运算符是:逻辑与(&&/and)、逻辑或(||/or)。 逻辑运算符重载的作用:利用逻辑运算符,可以让两个自定义类型的对象进行对比。 提示: …
cpp仿函数
05-6 运算符重载-函数调用(小括号)运算符 函数调用运算符()也可以重载,亦成为:小括号运算符重载。 由于重载后的使用方式非常像函数的调用,所以也被称之为:仿函数。 仿函数没有固定的写发,非常灵活 提示:仿函数在后续(STL)中大量使用。05-6 运算符重载-函数调用(小括号)运算符05-6 运…
cpp运算符重载-关系运算符
05-5 运算符重载-关系运算符 关系运算符包括:大于(>)、小于(<)、等于(==)、不等于(!=)、大于或等于(>=)、小于或等于(<=)。 关系运算符重载的作用:利用关系运算符,可以让两个自定义类型的对象进行对比。 我们主要学习的是等于和不等于的判断。但是大于小于等等也…
cpp运算符重载-赋值重载
05-4 运算符重载-赋值重载 在学习类中的构造函数和析构函数的时候,我们学习过:写了一个类,c++的编译器会给这个类自动添加四个函数。 默认构造函数(无参,函数体为空) 默认析构函数(无参,函数体为空) 默认拷贝构造函数(对属性进行值拷贝) 赋值运算符operator=,用于对属性进行值拷贝 在学…
cpp运算符重载-递增递减
05-3 运算符重载-递增递减 递增递减重载的作用:让结构体或者类可以直接完成递增递减,无需将数据单独从结构体或者类拿出来。 完成左移运算符重载有两种方法: 在成员函数里面实现重载。 在全局函数里面实现重载。 使用重载的时候,需要使用关键字operator。递增递减重载的函数声明是(准确说是以递增+…
运算符重载-输入输出-右移运算符
05-2-2 运算符重载-输入输出-右移运算符 右移运算符重载的作用:让结构体或者类可以直接完成左移运算符,无需将数据单独从结构体或者类拿出来。常见的需要用到右移运算符(>>)的场景是:使用cin输入。 完成左移运算符重载有、且只有一种方法: 在全局函数里面实现重载。 使用重载的时候,需…
运算符重载-输入输出-左移运算符
05-2-1 运算符重载-输入输出-左移运算符 左移运算符重载的作用:让结构体或者类可以直接完成左移运算符,无需将数据单独从结构体或者类拿出来。常见的需要用到左移运算符(<<)的场景是:使用cout输出。 完成左移运算符重载有、且只有一种方法: 在全局函数里面实现重载。 使用重载的时候,…
cpp运算符重载-四则运算
05-1 运算符重载-四则运算 四则运算的运算符重载的作用:让结构体或者类可以直接完成四则运算,无需将数据单独从结构体或者类拿出来。 完成四则运算的运算符重载有两种方法: 在成员函数里面实现重载。 在全局函数里面实现重载。 使用重载的时候,需要使用关键字operator。四则运算运算符重载的函数声明…
cpp运算符重载
05-0 运算符重载 运算符重载在 c++中是一个非常重要的知识点。 上一次遇到重载二字是在函数之中。在函数中,不同的传入的数据类型或数据数量可以实现重载:简单来说就是使用相同的函数名称,但是传入不同的参数,所对应的函数内容也不同。 运算符重载的概念:对已有的运算符进行重新定义,赋予它另外的一种功能…
cpp成员函数做友元
04-3 友元-成员函数做友元 在声明创建类的时候,写一行friend 类名称::成员函数声明;,这个新的成员函数即可在后续访问这个类中的私有属性。 不好意思此处实在是跑不通代码......
cpp类做友元
04-2 友元-类做友元 在声明创建类的时候,写一行friend 类名称;,这个新的类即可在后续访问这个类中的私有属性。 #include <iostream> #include <string> using namespace std; //类做友元 class Build…
cpp全局函数做友元
04-1 友元-全局函数做友元 在声明创建类的时候,写一行friend 全局函数声明;,这个全局函数即可在后续访问这个类中的私有属性。 #include <iostream> #include <string> using namespace std; class Build…
cpp友元
04-0 友元 举个例子:在家中,存在客厅、寝室。在客厅中,可以用来接待所有客人。但是寝室,是只有自己可以进入的。但是如果来了好朋友,那么朋友也可以进入寝室。 在上面的例子里,客厅就相当于是public权限,而寝室就相当于是private权限。 在程序中,有些私有属性也需要被类外的一些特殊函数或者类…
cpp-常函数和常对象
03-4 常函数和常对象 常函数: 成员函数后加const后我们称这个函数为:常函数。 常函数内不可以修改成员属性 如果在成员属性声明的时候加上关键字mutable,在常函数中可以修改 常对象: 声明对象前加上const,则这个对象是常对象。 常对象只能调用常函数。 我们来试一试: 常函数: 成员函…
cpp空指针访问成员函数
03-3 空指针访问成员函数 在 c++中,允许空指针调用成员函数的,但是也需要注意有没有用到this指针。 如果用到了this指针,需要加以判断保证代码的健壮性。 #include <iostream> using namespace std; class Person { publi…
cpp-this指针
03-2 this指针 在 03-1 成员变量和成员函数分开存储 中,我们知道了在 c++中,类中的成员变量和成员函数是分开存储的。简单复习一下: 在c++中,只有类内的非静态成员变量才属于对象上,其他的(静态成员对象、成员函数)都不属于对象上。 没一个非静态的成员函数只会诞生一份函数实例,也就是所…
cpp成员变量和成员函数分开存储
03-1 成员变量和成员函数分开存储 在类中,无论是变量还是函数我们都称之为:成员。 在 c++中,类内的成员变量和成员函数是分开存储的。 只有非静态成员变量才属于类的对象上。 我们先创建一个空的类,看看占用的内存大小是多少。 #include <iostream> using name…
静态成员函数
02-8-2 静态成员函数 静态成员函数的特点: 所有对象共享同一个函数 静态成员函数只能访问静态成员变量。 同静态成员变量一样,静态成员函数也有两种访问方式 通过对象访问: #include using namespace std; class test { public: static void…
静态成员变量
02-8-1 静态成员变量 静态成员变量的特点: 所有对象共享一份数据; 在编译阶段分配内存(一般的数据存放在栈区) 相当于在运行可执行文件前就已经分配完成了。(在 windows 环境下.exe就是可执行文件)(静态成员变量数据存放在全局区) 类内声明,类外初始化 所有对象共享一份数据 #incl…