cpp静态成员
02-8-0 静态成员 成员出现在类中。无论是成员属性还是函数,我们可以称为:成员属性、成员函数。 静态变量:这个在学习内存四区的时候讲过。在变量前加上static,我们将称这个变量称之为静态变量。静态变量存储在全局区。 静态成员:静态成员出现在类中。在成员变量和成员函数前加上关键字:static。…
类对象作为类成员
02-7 类对象作为类成员 c++中,类中的成员可以是另外一个类的对象。我们称呼这样的成员为:对象成员。 比如: class A {}; class B { A a; } B类中有对象A作为成员,那么A就是对象成员。 #include <iostream> using namespace…
cpp-初始化列表
02-6 初始化列表 作用:在类中初始化类中的属性。 c++提供了初始化列表语法,用来初始化属性。 语法:构造函数():属性1(数据值1),属性2(数据值2)...{} 注意冒号:的位置:冒号位于构造函数形参列表的后面。 假设我们有这样的一个类: class Person { private: st…
cpp深拷贝和浅拷贝
02-5 深拷贝和浅拷贝 深拷贝和浅拷贝是一个经典的面试题目,也是一个常见的坑。(虽然我认为面试对我没啥用途......) 浅拷贝:简单的赋值拷贝操作 深拷贝:在堆区重新申请内存空间,进行拷贝操作 如果在类中,有属性是指向堆区的指针,做赋值操作的时候就会出现深拷贝和浅拷贝的问题。 简单来说,就是在类…
cpp构造函数调用规则
02-4 构造函数调用规则 写了一个类,c++的编译器会给这个类自动添加四个函数,但是我们目前只用知道前三个。 默认构造函数(无参,函数体为空) 默认析构函数(无参,函数体为空) 默认拷贝构造函数(对属性进行值拷贝)。 构造函数调用规则如下: 如果用户定义了有参构造函数,c++不会再自动提供默认构造…
cpp拷贝构造函数的调用时机
02-3 拷贝构造函数的调用时机 在 c++中使用拷贝构造函数的时机通常有以下三个: 使用一个已经创建完毕的对象来初始化一个新的对象(常用) 值传递的方法给函数的参数传值 以值方式返回局部对象 我们先创建一个类用于演示: class Person { private: int m_age; publ…
cpp构造函数的分类和调用
02-2 构造函数的分类和调用 构造函数:用于初始化对象。 构造函数的语法:类的名称() {} 构造函数没有返回值,但是也不能写void。 函数的名称与类的名称相同 构造函数可以有参数,因此可以发生重载(函数重载:相同的函数名称,不同的执行内容。可参考笔记。) 程序在调用对象的时候会自动调用构造,无…
cpp构造函数和析构函数
02-1 构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题。其中,构造函数用于初始化;析构函数用于清理。 一个对象或者变量没有初始状态,对其使用的后果是未知的。 使用完一个对象或者变量,没有及时清理也会造成一定的安全问题。 c++中使用构造函数和析构函数来解决这种安全问题。这两个函数会…
cpp对象的初始化和清理
02-0 对象的初始化和清理 像我们平常生活中购买的电子产品都会存在出厂设置,在某一天我们不需要使用的时候也会删除部分个人数据来保证数据安全。 c++中面向对象的事项来源于生活,每个对象都会有初始设置以及对象销毁前的数据清理设置。
cpp类外写成员函数
01-5 类外写成员函数 在 cpp 中,写一个类的时候,可以在类外写成员函数的具体实现代码。但是需要在类内声明 #include <iostream> using namespace std; class test { public: int print(); }; int test:…
练习2-点和圆的关系
01-4-2 练习2-点和圆的关系 设计一个圆类(Circle),设计一个点类(Point)。计算点和圆的关系 #include <iostream> #include <string> #include <math.h> using namespace std;…
练习1-设计立方体类
01-4-1 练习1-设计立方体类 设计一个立方体类(Cube) 求出立方体的展开图面积和体积 分别利用全局函数和成员函数判断两个立方体是否相等。 #include <iostream> using namespace std; //设计一个立方体类(Cube) //求出立方体的展开图面…
cpp-成员属性设置为私有
01-3 成员属性设置为私有 在实际使用、开发之中,一般都会把成员属性设置为私有,也就是private。这样会产生如下的好处: 优点 1:将成员属性设置为私有,可以自己控制读写权限。 优点 2:对于写权限,我们可以检测数据的有效性。 可以自己控制读写权限。 #include #include usi…
cpp-strcut和class的区别
02 strcut和class的区别 在 c++中,封装的语法是:class 类的名称 {访问权限: 属性 / 行为};。当然,也可以struct 类的名称 {访问权限: 属性 / 行为}; strcut和class的唯一区别就是:默认访问权限不同。 strcut:默认权限为公共权限,即:publi…
cpp封装访问权限
01-2 封装的意义-访问权限 在学习 01-1 的时候,我们已经了解过封装的意义了: 将属性和行为作为一个整体。 将属性和行为使用权限进行管控。 前者我们已经学习过了,定义一个类,这个类里面有访问权限、属性和行为。其语法是:class 类的名称 {访问权限: 属性 / 行为};。 现在,我们学习的…
cpp封装的意义
01-1 封装的意义 封装是c++面向对象的三大特性之一。(复习一下,c++面向对象的三大特性:封装、继承、多态) 封装的意义: 将属性和行为作为一个整体用于表示生活中的事物。 将属性和行为使用权限进行管控。 提示:对象必须要有属性和行为,缺一不可。 当然,这篇笔记记录的时候封装的意义,对于其的权限…
cpp类与对象
00 类与对象 这是c++中最重要的内容:类和对象。 在c++中,面向对象这个思想下,有三大特性:封装、继承、多态。 c++中认为万物皆可对象,对象上有其属性和行为。 我们可以举几个例子: 人可以作为一个对象,其属性有:姓名、年龄、身高、体重,行为有走路、跑步、干饭等等。 车可以作为一个对象,其属性…
cpp-函数重载-注意事项
03-2 函数重载-注意事项 引用作为函数重载的条件 #include using namespace std; void func(int& a) { cout
cpp函数重载-概述
03-1 函数重载-概述 作用:函数名称可以相同,提高复用性。 这是 c++中非常重要的知识点。 简单来说,就是 c++中,函数名称可以相同,但是需要满足一些条件。 函数重载的需要满足的条件: 函数在同一个作用域下 函数的名称相同 函数参数的类型不同,或者个数不同,或者顺序不同。 注意:函数的返回值…
cpp函数占位参数
02 函数占位参数 在 c++中,函数的形式参数列表中可以由占位参数,用来做占位。调用函数的时候必须填补这个位置。 语法:返回值类型 函数名称 (数据类型) {} 在现阶段使用函数的占位参数意义不大,但是后面的内容会遇到这样的使用内容。 占位参数:只要在形参列表写上数据类型即可。 #include …
cpp函数的默认参数
01 函数的默认参数 在c++的函数中,函数的形式参数列表是可以由默认数值的。 语法:返回值类型 函数名称 (参数 = 默认值) {}。 举个例子: 之前我们写一个函数是这样写的。 #include <iostream> using namespace std; int func1(in…
cpp引用和指针的关系
07 引用和指针的关系 引用很容易与指针混淆,它们之间有三个主要的不同: 不存在空引用。引用必须连接到一块合法的内存。但是指针可以被指向一个非法的内存空间(野指针)。 引用: int a = 10; int& b = a; 指针: int a = 10; int* p = &a; p = (int*…
cpp常量引用
06 常量引用 作用:常量引用主要用于修饰形式参数,防止进行误操作 当然,说到常量,一定会想到const。 在函数形参列表中,可以添加const修饰形式参数,防止形式参数改变实际参数。 #include <iostream> using namespace std; void p(int…
cpp引用的本质
05 引用的本质 本质:引用的本质在 c++中,就是一个指针常量。 对于指针而言,指针常量的指针的指向是不可以修改的。 复习:指针常量:指针的指向是不可以修改。常量指针:使用指针不可以修改数据值。 #include <iostream> using namespace std; int …
cpp引用做函数的返回值
04 引用做函数的返回值 作用:引用可以作为函数的返回值 注意:不要返回局部变量的引用 作用:函数调用作为左值 我们分开理解一下: 引用可以作为函数的返回值,但是不要返回局部变量的引用。 如何将引用作为函数的返回值: int& test1(); int main() { int& ref = tes…
cpp引用做函数参数
03 引用做函数参数 作用:函数传递参数的时候,可以使用引用来让形式参数修饰实际参数 优点:可以简化指针修改实际参数 我们可以回顾一下目前学习过的函数传递方式: 值传递:实参不会被修改,形参不可以修饰实参 地址传递:实参可以被修改,形参可以修饰实参。但是需要传递地址。 但是,我们使用引用的话,形参也…
cpp引用注意事项
引用注意事项 引用有一些注意事项,请务必关注: 引用必须初始化 引用在初始化后,就不可以改变了。 如何理解? 引用必须初始化 如之前的笔记所言。如果创建一个int a = 10;可以如下的操作: int a; a = 10; 那么在这里,a最开始是没有初始值的。而10是后续赋值赋出来的。 但是在引用…
cpp引用的基本使用
引用的基本使用 这个是 c++中非常重要的技术 作用:给变量起别名 语法:数据类型 &别名 = 原名 #include <iostream> using namespace std; int main() { int a = 10; int& b = a; cout &l…
cpp-new操作符
03 new操作符 在 c++中,可以使用new操作符在堆区开辟数据。 堆区数据的开辟:由开发手动开辟,手动释放。释放使用操作符delete。如果不释放,将会在程序运行结束之后由操作系统自动释放。 语法:创建:new 数据类型 删除:delete 地址 利用new创建的数据,会返回这个数据对应类型的…
程序运行后
02 程序运行后 栈区: 由编译器自动分配、释放。用于存放函数的参数值、局部变量、形参数据等。 注意:不要返回局部变量的地址,因为栈区开辟的数据由编译器自动释放。 #include using namespace std; //栈区数据的注意事项 //栈区数据由编译器管理 //注意:不要返回局部变量…
程序运行前
01 程序运行前 在程序编译后,生成了.exe的可执行文件(当然这个 exe 是 windows 环境下的可执行程序了......),未执行程序前分为两个区域: 代码区 存放 cpu 执行的机器指令:也就是改为二进制(0101这样的)的代码(写完的代码会变成机器阅读的二进制)。 代码区是共享的:共享…
cpp内存分区模型
01 内存分区模型 c++在程序执行的时候,会将内存划分为4 个区域 代码区 :(程序运行前)存放函数体的二进制代码,由操作系统进行管理。 比如说写的cout << "hello" << endl;(也就是代码);写的注释等等,都在代码区。 全局区:(程序…
cpp随机数
随机数 c++里面随机生成数字的方法:rand()%100 ->生成一个 0-99 的数字。如果是rand()%100 + 1 ->生成一个 1-100 的数字。 发现一个问题,每次的随机数都是一样。我们要修改一下随机数的种子 srand((unsigned int)time(NULL)…
cpp开根
开根 c++中开根号需要其他的头文件 #include <math.h> 然后使用函数sqrt(x);即可。 比如: #include <iostream> #include <math.h> void main() { double a = 16.0; b = …
luogu B2050 三角形判断
三角形判断 B2050 三角形判断 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。 输入格式 输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。(三条边的长度均不超过 …