C++基础
__anonymous_
Stay hungry, stay foolish.
展开
-
C++实现String类
字符串匹配的地方都是用都暴力法,有空了再优化#include<iostream>using namespace std;class String { friend ostream &operator<<(ostream &m_cout, String &s); friend istream &operator>>(istream &m_cin, String &s);public: //原创 2020-09-18 00:54:43 · 218 阅读 · 0 评论 -
C++模版 (一) ----- 函数模版
1原创 2020-09-05 16:58:39 · 93 阅读 · 0 评论 -
C++基础 ----- 文件操作
文章目录写在前面文本文件的读写操作流程一、写文件二、读文件三、关于文件的打开方式二进制文件的读写操作一、写文件二、读文件写在前面C++中对文件操作需要包含头文件<fstream>文件类型分为两种文本文件:文件以文本对ASCII码形式存储在计算机中二进制文件:文件以文本的二进制形式存储在计算机中操作文件的三大操作ofstream:写操作ifstream:读操作fstream:读写操作文本文件的读写操作流程一、写文件(1) 流程包含头文件:&l原创 2020-08-31 17:47:52 · 148 阅读 · 0 评论 -
运算符重载——函数调用运算符重载
函数调用运算符重载:本质上就是重载双括号()重载后的函数称为仿函数仿函数没有固定写法,非常灵活代码:class MyPrint {public: void operator()(string test) { cout << test << endl; } void operator()(int i) { cout << i << endl; }};class MyAdd原创 2020-05-29 15:40:02 · 1823 阅读 · 0 评论 -
运算符重载——关系运算符重载
写在前面:1)本篇涉及内容:关系运算符重载的应用场景实现关系运算符重载的代码2)关系运算符包含:<,>,==,!=应用场景:类中实现关系运算符重载,则可以实现自定义数据类型之间的比较,比较内容根据需求来.C++的类中重载“==”就相当于Java的类中重写equals方法实现关系运算符重载:class Person {public: Person(int m_Age, string name) : m_Age(m_Age), name(name) {}原创 2020-05-28 23:49:20 · 838 阅读 · 0 评论 -
C++多态(二)——纯虚函数、抽象类
本篇涉及内容:纯虚函数抽象类纯虚函数:1)应用场景:在多态中,通常父类中的虚函数是无意义的,一般情况下都会被子类重写,此时可以将父类中的这些虚函数改为纯虚函数.2)纯虚函数语法:virtual 返回值类型 函数名 (参数列表) = 0;抽象类:1)定义:当这个类中但凡存在一个虚函数,则这个类就称为抽象类.2)抽象类的特点:无法实例化对象子类必须重写抽象类中的纯虚函数,否则子类也为抽象类,无法实例化对象代码示例:...原创 2020-05-25 19:59:14 · 350 阅读 · 0 评论 -
C++多态(一)——多态的定义、虚函数、静态绑定和动态绑定
本篇涉及内容:多态的定义虚函数多态的定义:多态分为两类静态多态:在同一个类中,函数重载和运算符重载都属于静态多态,即函数在相同的函数名情况下,存在着不同的状态,体现了多态特征.动态多态:一个父类可能会有多个子类,当子类重写了父类的虚函数后,用父类引用or指针指向子类对象,调用重写的函数时,会根据子类对象的不同来动态调用被重写的函数.虚函数:虚函数指针:当一个类中存在虚函数时,这个类就当且仅当存在一个虚函数指针(4个字节大小),虚函数指针指向的是这个类独有虚函数表.虚函数表:一个类原创 2020-05-24 18:03:00 · 537 阅读 · 0 评论 -
运算符重载——拷贝构造函数与赋值运算符的区别、如何实现赋值运算符的深拷贝
写在前面1)C++的编译器会默认给一个类提供4个函数默认构造函数(无参、函数体为空)默认析构函数(无参、函数体为空)默认拷贝函数(浅拷贝,对属性仅进行值拷贝)赋值运算符operator=(对属性进行值拷贝)我们可以看见类的默认拷贝构造函数和赋值运算符,都是对属性进行值拷贝,但是它们之间有什么区别吗?在什么情况下会调用它们?下面会详细介绍.2)本篇涉及内容:拷贝构造函数和赋值运算符的区别如何实现赋值运算符的深拷贝拷贝构造函数和赋值运算符从上面代码我们可以知道:默认的拷贝构造原创 2020-05-23 16:54:30 · 1086 阅读 · 3 评论 -
C++继承机制(三)——多继承、菱形继承、虚继承原理
本篇涉及内容:多继承菱形继承虚继承C++中的多继承:1)基本语法:class SubClass : public SuperClass1, public SuperClass22)多继承可能出现的问题:当父类与父类直接出现同名情况此时访问这些父类间的同名成员需要加上父类作用域用于区分是来自哪个父类的成员菱形继承:1)基本概念有两个子类同时继承了同一个父类,然后又有一个类多继承了这两个子类2)菱形继承可能会出现数据杂冗问题比如动物都有sex这个属性所以羊和驼这两个类都原创 2020-05-23 15:10:43 · 788 阅读 · 0 评论 -
C++继承机制(二)——继承中的构造和析构顺序、继承同名成员的处理方式
本篇涉及内容:继承中的构造和析构顺序继承同名非静态成员的处理方式继承同名静态成员的处理方式继承中的构造和析构顺序:class A {public: A() { cout << "A构造函数!" << endl; } ~A() { cout << "A析构函数!" << endl; }};class SuperClass {public: SuperClass() { cout << "SuperClas原创 2020-05-22 18:25:26 · 240 阅读 · 0 评论 -
C++继承机制(一)——基本语法、三种继承方式、继承哪些数据
本篇涉及内容:C++继承的基本语法C++的三种继承方式子类会继承父类的哪些数据?C++继承的基本语法:Class Student : public Person {}Class Student : protected Person {}Class Student : private Person {}C++的三种继承方式:public继承protected继承private继承由上面的图我们可以看出来:无论什么方式的继承,在子类中都无法访问到从父类继承原创 2020-05-22 17:01:05 · 342 阅读 · 1 评论 -
C++中的友元
友元的作用:让一个类外函数或者其他类对象可以访问另一个类中的私有成员友元的三种实现:全局函数作为友元类作为友元成员函数作为友元友元的关键字为friend,可以声明一些特殊的函数、类到另一个类中当作它的好朋友,这些好朋友就可以访问这个类中的所有私有成员了.1)全局函数做友元这里的全局函数goodFriend()并不是Building类中的友元函数,所以不能访问该类中的私有属性,下面我们把它声明为Building类中的友元函数,看看有什么变化.全局函数作为友元实现的效果:让全局函数可以原创 2020-05-22 13:40:17 · 126 阅读 · 0 评论 -
运算符重载——递增运算符重载
应用场景:class MyInteger {public: MyInteger() { m_A = 0; }private: int m_A;}=================================实现一下效果Integer i;cout << i << endl;// 打印0cout << ++i << endl;// 前置递增:打印1cout << i++ << endl;// 后置递增:原创 2020-05-22 09:57:23 · 731 阅读 · 1 评论 -
运算符重载——左移运算符重载
应用场景:可以输出自定义的数据类型信息Person p("kll", "男")cout << p << endl; // 可以输出对象p的所有属性(类似java中的toString)左移运算符重载:在上一篇算术运算符重载中介绍了,运算符重载可以在成员函数和全局函数中实现,但请注意:左移运算符重载务必在全局函数中实现.class Person {public: string name; string sex; Person(string name, string原创 2020-05-21 18:32:22 · 689 阅读 · 0 评论 -
运算符重载——算术运算符重载
一、写在前面1.本篇涉及内容虚函数多态先期联编与迟后联编类的杂冗抽象类多重继承原创 2020-05-21 17:26:56 · 1357 阅读 · 0 评论 -
const修饰成员函数
常函数:成员函数后加const后,我们称这个函数为常函数在常函数内不可以修改成员的属性成员属性声明时加关键字mutable后,在常函数中依然可以修改常对象:声明对象前加const称该对象为常对象常对象不能在类外修改其成员属性(但可以修改mutable修饰的成员属性)常对象只能调用常函数示例:1)常函数原理:因为this指针的本质是指针常量,指向的是当前对象的内存地址,在一般函数中相当于Person *const this,即无法修改指针的值,但是在常函数前有一个const,所以原创 2020-05-21 16:24:48 · 168 阅读 · 0 评论 -
指针常量、常量指针和常量指针常量
1.const可以存在的位置1)指针常量int *const ptr;2)常量指针const int *ptr;int const *ptr;3)常量指针常量const int *const ptr;记忆技巧:把const读作常量,*读作指针,谁在前面就先读谁谁在前面谁就不允许改变例如:const int *ptr; // const在前,*在后面,则读作常量指针int *const ptr; // *在后面,const在前面,则读作指针常量2.指针常量的作用原创 2020-05-21 15:42:17 · 357 阅读 · 0 评论 -
C++继承机制(中篇)
一、写在前面1.上篇涉及内容C++的三种继承方式C++的访问权限子类对象的构造过程和析构过程详见:C++继承机制(上篇)2.本篇涉及内容子类成员和父类成员同名情况C++中函数隐藏、函数重写的概念区分二、子类成员和父类成员同名情况1.成员变量同名class Person {public: Person(int age, string name) { this->age = age; this->name = name;原创 2020-05-21 11:09:43 · 116 阅读 · 0 评论 -
C++的堆与拷贝构造函数
一、写在前面1.C++的内存划分(1)全局数据区:存放全局变量、常量、静态数据(2)代码区:存放程序的代码(3)栈区:存放局部变量、函数的参数、返回数据、返回地址等(4)堆区(自由存储区):作为其他操作的使用的资源注意:当我们的程序new或者malloc申请到了一些堆内存时,在使用完之后务必回收堆内存,否则会造成内存泄露!2.malloc/free与new/delete(1)用ma...原创 2020-05-01 14:00:08 · 494 阅读 · 0 评论