C++
c++学习笔记
Lee Neo
稚晖的小迷弟。
展开
-
STL中最常见的三种容器vector、list、map对比分析
/resize 重新指定大小 ,若指定的更大,默认用0填充新位置,可以利用重载版本替换默认填充。cout原创 2022-10-20 10:34:25 · 537 阅读 · 0 评论 -
vector容器嵌套容器
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int main() { //创建大容器:v vector<vector<int>> v; //创建小容器 vector<int> v1; vector<int> v2; vector<int...原创 2021-12-18 21:40:07 · 284 阅读 · 0 评论 -
vector 容器初识
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;void Print(int val){ cout << val << endl;}int main() { //创建容器对象,并通过模板参数来指定容器中存放的数据类型; vector<int> v; //向容器...原创 2021-12-18 20:29:49 · 126 阅读 · 0 评论 -
STL标准模板库初识
常用迭代器为双向迭代器和随机访问迭代器;原创 2021-12-18 15:47:35 · 244 阅读 · 0 评论 -
模板2——类模板
#include<iostream>#include<string>using namespace std;//类模板,可以有默认数据类型;template<class NameType,class AgeType=int>class Person{public: Person(NameType name, AgeType age) { m_Name = name; m_age = age; } void ShowPerson(...原创 2021-12-18 11:27:55 · 478 阅读 · 0 评论 -
模板1——函数模板
#include<iostream>#include<string>using namespace std;//创建函数模板;template<typename T>void MySwap(T& a, T& b){ T temp = a; a = b; b = temp;}int main() { int a = 10; int b = 20; //1、自动类型推导 MySwap(a, b); cout...原创 2021-12-16 22:07:35 · 572 阅读 · 0 评论 -
文本文件的读写操作
ifstram:读操作;inputofstream:写操作;output;原创 2021-12-12 22:59:52 · 570 阅读 · 0 评论 -
多态使用的四种方式
多态使用:父类的指针或引用指向子类对象;调用方式1.在函数调用中,通过父类指针指向子类://3、抽象电脑基类,提供工作函数;class Computer{private: CPU* m_CPU; VideoCard* m_VideoCard; Memory* m_Memory;public: Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)//相当于 CPU* CPU=new HuaweiCPU,Vide..原创 2021-12-12 21:48:02 · 1228 阅读 · 0 评论 -
多态——电脑组装实例
在构造函数中初始化对象属性,在创建对象时更加符合习惯;#include<iostream>#include<string>using namespace std;//1、抽象出电脑零件的基类;//class CPU{public: //纯虚函数提供抽象函数; virtual void Calculate() = 0;};//显卡class VideoCard{public: virtual void Display() = ...原创 2021-12-12 15:48:39 · 531 阅读 · 0 评论 -
虚析构和纯虚析构
#include<iostream>#include<string>using namespace std;class Animal{public: Animal() { cout << "animal 的构造" << endl; } virtual void Speak() = 0; //子类不写析构函数也不会报错,可能因为子类有默认析构函数; virtual ~Animal() = 0;};//纯虚析构...原创 2021-12-11 22:46:04 · 200 阅读 · 0 评论 -
纯虚函数和抽象类——案例2:制作饮品
实例化对象的两种方法:Base a;new Base;多态调用时:父类为虚函数,则无法实例化,bug:调用函数时不用加返回值如void;否则不会调用注意一定要加public:#include<iostream>#include<string>using namespace std;//制作饮品类class DoDrink{public: //煮水; virtual void Boil() = 0; //冲泡; virtua...原创 2021-12-11 21:56:30 · 615 阅读 · 0 评论 -
多态案例一——计算器类
真实开发中,提倡开闭原则:对扩展开放,对修改关闭;多态的优点:代码结构清晰;可读性强;利于前期和后期的扩展及维护;c++提倡使用多态设计程序架构多态使用体会:函数调用时使用引用,否则使用指针;#include<iostream>#include<string>using namespace std;class AbstractCalculate{public: int m_Num1; int m_Num2; virtual int GetRe.原创 2021-12-11 17:12:54 · 81 阅读 · 0 评论 -
多态基本概念及原理
多态:polymorphism指程序能通过引用或指针的动态类型获取类型特定行为的能力;多态的含义是“多种形式”,相当于一个公共接口;传入不同的对象会产生不同的行为;多态满足条件:1、有继承关系;2、子类重写父类的子函数;多态使用:父类的指针或引用指向子类对象;重写: 返回值 、函数名 、参数列表 完全一致多态原理:virtual 的虚函数会在父类存储虚函数指针,指向虚函数表(表内存着函数),当子类重写时,vfptr的值会变化。...原创 2021-12-11 11:30:35 · 569 阅读 · 0 评论 -
继承的方式、多继承、菱形继承
继承相当于作用域:继承中所有成员属性都会被子类继承;父类中的私有成员,会被继承,但无法访问;继承中先构造父类,再构造子类,析构则反之;继承同名成员(属性和函数)时,子类的成员直接访问 s.m_a;,父类 s.Base::m_a;虚继承解决了菱形继承中子类继承两份相同数据的问题;实际开发中避免使用多继承;继承中的对象模型:静态成员访问方式:和非静态成员一样,只是静态成员有两种处理方式;静态属性的访问静态函数访问:多...原创 2021-12-09 20:55:21 · 355 阅读 · 1 评论 -
继承的基本语法
class 子类 :public 父类{};原创 2021-12-08 23:12:30 · 267 阅读 · 0 评论 -
仿函数(函数调用运算符重载)
原创 2021-12-08 21:31:22 · 145 阅读 · 0 评论 -
关系运算符重载
#include<iostream>#include<string>using namespace std;class Person{public: int m_age; string m_name; Person(int age,string name) { m_age = age; m_name = name; } //重载运算符== bool operator==(Person &p) { if (m_age == ...原创 2021-12-08 21:21:02 · 180 阅读 · 0 评论 -
赋值运算符重载
赋值运算符重载用于解决赋值操作的浅拷贝问题;#include<iostream>#include<string>using namespace std;class Person{public: int *m_age; //构建函数 Person(int age) { //将年龄数据开辟到堆区; m_age = new int(age); } //重载赋值运算符 Person& operator=(Person&...原创 2021-12-08 21:03:29 · 501 阅读 · 0 评论 -
递增运算符重载
前置递增返回引用,后置递增返回值;后置递增不能实现链式编程,c++内置就是这样;后置递增占位符(int),从而与前置递增区分;(不确定)递增运算符重载只能定义在类内,且格式较固定#include<iostream>#include<string>using namespace std;class MyInteger{public: MyInteger() { m_A = 0; } int m_A; //后置递增运算符,不能够实现链...原创 2021-12-08 20:24:57 · 756 阅读 · 0 评论 -
左移运算符重载
左移运算符重载配合友元能够实现输出自定义数据类型;左移运算符 << 只能通过全局函数定义;注意返回cout才能够实现链式编程;#include<iostream>#include<string>using namespace std;class Person{ ///配合友元能够实现自定义数据类型; friend ostream& operator<<(ostream& cout, Person& p);...原创 2021-12-07 23:11:49 · 87 阅读 · 0 评论 -
运算符重载——加号
加号运算符重载:很简单,就是编辑器给起了一个通用名称,更加方便;包括:成员函数重载、全局函数重载、运算重载的函数重载方式;#include<iostream>#include<string>using namespace std;class Person{public: int m_a; int m_b; //成员函数的加号重载; Person operator+(Person& p) { Person pt; pt....原创 2021-12-07 22:31:41 · 1399 阅读 · 1 评论 -
友元及其实现
全局函数做友元类做友元#include<iostream>#include<string>using namespace std;class Building{ //表明GoodGay是本类的好朋友,允许GoodGay访问本类的私有属性; friend class GoodGay;public: //用构造函数初始化; Building() { m_SittingRoom = "客厅"; m_BedRoom = "卧室"; }...原创 2021-12-07 21:14:45 · 374 阅读 · 0 评论 -
const修饰的——常对象、常函数
常对象只能调用常函数;常函数不可以修改成员属性,除非成员声明加mutable([ˈmjuːtəbl]可变的);常函数:原创 2021-12-06 23:35:33 · 74 阅读 · 0 评论 -
对象的空指针
指向对象的空指针也可以访问对象成员,因此需要加判断this是否空来保证代码健壮性;#include<iostream>#include<string>using namespace std;class Person{public: int m_age; void ShowClassName() { cout << "this is class Person!" << endl; } void ShowPersonNam...原创 2021-12-06 23:15:29 · 319 阅读 · 0 评论 -
成员变量和成员函数分开存储;this指针;
sizeof 一个空类的大小等于1;this作用:1、区分同名的形参和成员变量;但可替代,如:其中this—>age 可以用作m_age 代替2、用 *this返回对象本身,可以实现链式编程;#include<iostream>#include<string>using namespace std;class Person{public: int age=0; //1.区分同名的形参和成员变量;其中this—>age ...原创 2021-12-06 23:23:11 · 69 阅读 · 0 评论 -
类和对象-static 静态成员变量、静态成员函数
//静态成员变量: //1 所有对象共享一份数据; //2 编译阶段就分配内存; //3 类内声明,类外初始化;两种访问方式:通过类名访问,通过对象访问;静态成员函数只能访问静态成员变量;原创 2021-12-05 21:52:39 · 88 阅读 · 0 评论 -
类和对象-对象的初始化和清理6-7初始化列表的方法
补充QT的实例说明初始化列表的方法;先构造成员再构造对象,析构反之(穿脱原则);原创 2021-12-05 21:04:44 · 163 阅读 · 0 评论 -
类和对象-对象的初始化和清理3-5
如果属性有在堆区开辟的(new),一定要自己提供拷贝构造函数,防止浅拷贝带来的问题;析构代码的作用是当在堆区开辟了,需要在析构函数中手动释放;原创 2021-12-05 17:42:38 · 192 阅读 · 0 评论 -
类和对象-对象的初始化和清理2-构造函数的分类及调用
#include<iostream>#include<string>using namespace std;class Person{public: //构造函数;调用对象前调用,用于初始化对象; //无参构造;默认构造 Person() { cout << "无参构造函数" << endl; } //有参构造; Person(int a) { age = a; cout << "有参构造函数" ...原创 2021-12-05 13:55:10 · 556 阅读 · 0 评论 -
类和对象-对象的初始化和清理1-构造函数和析构函数
构造函数;调用对象前调用,用于初始化对象;//析构函数;销毁对象前调用,用于清理对象;#include<iostream>#include<string>using namespace std;class Person{public: //构造函数;调用对象前调用,用于初始化对象; Person() { cout << "Person 构造函数" << endl; } //析构函数;销毁对象前调用,用于清理对...原创 2021-12-04 14:04:56 · 262 阅读 · 0 评论 -
类和对象的封装——两个实例
立方体类:返回多个数据时,可以使用数组,但是需要new或static来保证数组在全局空间;利用成员函数比较两个对象时,只需要一个形参数就行;#include<iostream>#include<string>using namespace std;//创建立方体类;class Cube {private: int m_l=0; int m_w=0; int m_h=0;public: //设置长宽高; void Getparam(int l原创 2021-12-02 23:11:55 · 226 阅读 · 0 评论 -
类和对象的封装——成员属性私有化的优点
#include<iostream>#include<string>using namespace std;//成员属性私有化的好处://创建人类;class person {public: void setname(string name) { m_name = name; } string ReadName() { return m_name; } void setAge(int age) { if (age > ...原创 2021-12-02 19:02:45 · 375 阅读 · 0 评论 -
类和对象——封装的意义
定义类时,可以将属性用m_表示,避免赋值的重名;struct 和class都可以定义类,唯一区别在于class默认成员private,struct默认成员public;创建学生对象案例#include<iostream>#include<string>using namespace std;//设计一个学生类;class stu { //访问权限:public: //属性: string m_name; int m_num=0; ...原创 2021-11-30 23:33:24 · 428 阅读 · 2 评论 -
函数高级——默认参数、占位参数、函数重载
注意:如果某个位置参数有默认值,那么这个位置往后都有默认值;函数声明和实现不能同时有默认值函数重载碰到默认参数容易产生二义性,应该避免;原创 2021-11-30 21:26:31 · 179 阅读 · 0 评论 -
引用的使用及常量引用
#include<iostream>using namespace std;int main() { int a = 10; int& b = a; //创建应用b cout << "a=" << a << endl; cout << "b=" << b << endl; b = 20; cout << "a=" << a <...原创 2021-11-30 20:35:08 · 196 阅读 · 0 评论 -
内存分区模型
总结:c++运行前分为全局区和代码区;代码区的特点和共享和只读;全局区中存放全局变量、静态变量(static int a;)、const修饰的全局变量、字符串常量;1.2程序运行后:栈区:由编译器自动分配释放,存放函数的参数值、局部变量;不要返回局部变量的地址;堆区:堆区数据由程序员管理开辟和释放;堆区数据利用关键字new开辟内存;#include<iostream>using namesp...原创 2021-11-29 22:40:29 · 208 阅读 · 0 评论 -
c++指针 const
最近看了黑马程序员的c++教程,因为有c基础,很多内容都学过,发现老师讲的特别好,特别清晰。指针:32位系统的指针所占内存空间为4位,64位的为8位;空指针和野指针:空指针:指针变量指向内存中编号0的空间;用途:初始化指针变量注意:空指针指向的内存空间无法访问;(0-255为系统占用空间,无权限访问)野指针:指向非法的内存空间(没有申请的空间)const 修饰指针:常量指针:const int *p=&a;指针的指向可以改,但指针指向的值不可以改;..原创 2021-11-29 21:17:49 · 312 阅读 · 0 评论 -
第一个c++程序
c++也可以兼容c,可以使用scanf和printf(),但必须引用stdio.h;#include<iostream>#include<stdio.h>using namespace std;int main(){int age;scanf("%d",&age);cout<<"hello "<<68<<" world !"<<1+2<<endl;cout<<"I am ".原创 2021-11-25 22:01:31 · 535 阅读 · 0 评论 -
2021-11-11
Linux才是c程序猿的主流工作平台;C/C++语言项目实战基础_哔哩哔哩_bilibili这是一个C/C++项目实战基础教程,包括C语言基础、C++基础和Linux编程基础。如果您想成为企业级的C/C++程序员,从本教程开始学习是非常合适的。https://www.bilibili.com/video/BV1tp4y1i7rL?p=5...原创 2021-11-13 16:08:59 · 205 阅读 · 0 评论