C++
尽人事zs听天命
无人驾驶决策规划
展开
-
C++ 模板template(二)——普通模板与函数模板
普通函数与函数模板的区别:普通函数调用时可以发生自动类型转换(隐式类型转换)函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换如果利用指定类型方式,可以发生隐式转换#include <iostream>using namespace std;//普通函数int myAdd01(int a,int b){ return a+b;}//函数模板template <class T>T myadd02(T a,T b){ return a原创 2020-09-22 15:21:44 · 105 阅读 · 0 评论 -
C++ 模板template(一)
基本语法:template <class T>基础测试代码:#include <iostream>using namespace std;template <class T>void mySwap(T &a,T &b){ T temp=a; a=b; b=temp;}template <class T> //每次使用前得声明void sortArr(T arr[],int len)原创 2020-09-22 11:03:03 · 132 阅读 · 0 评论 -
C++ 文件操作详解 fstream
C++中对文件操作需要包含头文件fstream操作文件三大类:1.ofstream:写操作2.ifstream:读操作3.fstream:读写操作写文件主要步骤:1.包含头文件#include <fstream>2.创建流对象ofstream ofs;3.打开文件ofs.open("文件路径",打开方式);4.写数据ofs<<"写入的数据";5.关闭文件ofs.close();文件打开方式:打开方式解释ios::in原创 2020-09-07 16:42:16 · 399 阅读 · 0 评论 -
C++ 多态(四)——虚析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码解决方法:将父类中的析构函数改为虚析构或者纯虚析构虚析构和纯虚析构共性:可以解决父类指针释放子类对象都需要具体的函数实现虚析构和纯虚析构区别:如果是纯虚析构,该类属于抽象类,无法实例化对象虚析构语法:virtual ~类名(){}纯虚析构语法:virtual ~类名()=0;类名::~类名(){}总结:1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象2.如果子类中没有堆区数据,可以原创 2020-09-07 14:29:51 · 181 阅读 · 0 评论 -
C++ 多态(三)——纯虚函数和抽象类
在多态中,通常父类中的虚函数的实现都是毫无意义的,主要调用的都是子类重写的内容因此可以将虚函数改为纯虚函数纯虚函数语法:virtual 返回值类型 函数名 (参数列表)=0;当类中有了纯虚函数,这个类也称为抽象类抽象类特点:无法实例化对象子类必须重写抽象类中的纯虚函数,否则也属于抽象类#include <iostream>using namespace std;class Base //只要有一个纯虚函数,这个类称为抽象类{public: virtual v原创 2020-09-07 11:26:48 · 107 阅读 · 0 评论 -
C++ 多态(二)——多态优点
多态的优点:代码组织结构清晰可读性强利于前期和后期的扩展以及维护 对拓展开放,对修改关闭#include <iostream>#include <string>using namespace std;//普通写法class Calculator{public: int m_num1; int m_num2; Calculator(int num_1, int num_2) { m_num1=num_1;原创 2020-09-07 10:36:00 · 1456 阅读 · 1 评论 -
C++ 多态(一)——多态的基本语法
多态是C++面对对象三大特性之一多态分为两类:静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定-编译阶段确定函数地址动态多态的函数地址晚绑定-运行阶段确定函数地址动态多态的满足条件:1.有继承关系2.子类重写父类的虚函数#include <iostream>using namespace std;class Animal{public: virtual voi原创 2020-09-07 08:58:46 · 174 阅读 · 0 评论 -
C++ 继承(四)——多继承语法
C++允许一个类继承多个类语法:class 子类:继承方式 父类1,继承方式 父类2 …多继承可能引发父类中出现同名成员,需要加作用域区分C++ 实际开发中不建议用多继承#include <iostream>using namespace std;class Base1{public: int m_A; int m_B; Base1() { m_A=100; }};class Base2{public: in原创 2020-09-05 15:31:34 · 153 阅读 · 0 评论 -
C++ 继承(三)——继承同名成员处理方式
当子类与父类出现同名的成员,如何通过子类对象,访问到子类或者父类中同名的数据访问子类同名成员,直接访问即可访问父类同名成员,需要加作用域#include <iostream>using namespace std;class Base{public: int m_A; Base() { m_A=100; } void func() { cout<<"Base"<<endl;原创 2020-09-04 16:22:51 · 167 阅读 · 0 评论 -
C++ 继承(二)——继承中的对象模型
继承中已经完整基层父类内容,但是私有成员编译器隐藏,不可访问。#include <iostream>using namespace std;class Base{public: int m_A;protected: int m_B;private: int m_C;};class Son1:public Base{public: int m_D;};void test01(){ Son1 s1; cout<&l原创 2020-09-04 15:42:15 · 63 阅读 · 0 评论 -
C++ 继承(一)——基础用法
继承优点:减少代码重复语法:class 子类:继承方式 父类 (子类亦称为派生类,父类亦称为基类)继承方式共有三种:公共基础保护继承私有继承#include <iostream>using namespace std;class Base{public: int m_A;protected: int m_B;private: int m_C;};class Son1:public Base{public: void原创 2020-09-04 15:25:59 · 94 阅读 · 0 评论 -
C++ 6种运算符重载详解
运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型加法运算符重载1.通过成员函数重载“+”2.通过全局函数重载“+”#include <iostream>using namespace std;class Person{public: int m_a; int m_b; Person(int a,int b) { this->m_a=a; this->m_b=b;原创 2020-09-04 11:20:56 · 408 阅读 · 0 评论 -
C++ friend 友元类——访问类中私有成员
友元的目的:让一个函数或类 访问另一个类中私有成员友元的三种实现:全局函数做友元类做友元类成员函数做友元#include <iostream>#include <string>using namespace std;//2.类做友元class GoodFriend{public: Building *building; void visit() //参观函数 访问Building中的属性 { cout<&原创 2020-09-03 14:57:20 · 3994 阅读 · 0 评论 -
C++ 类class const修饰成员函数
常函数:成员函数后加const后我们称这个函数为常函数常函数内不可以修改成员属性成员属性声明关键字mutable后,在常函数中依然可以修改常对象:声明对象加const称该对象为常对象常对象只能调用常函数#include <iostream>using namespace std;class Person{public: int m_a; mutable int m_b; void showPerson() const //常函数不可原创 2020-09-03 11:07:58 · 798 阅读 · 0 评论 -
C++ this指针作用解析
this指针用途:当形参和成员变量同名时,可用this指针来区分在类的非静态成员函数中返回对象本身,可使用return *this #include <iostream>using namespace std;class Person{public: int age; Person(int age) { this->age=age; //1.当形参和成员变量同名时,可用this指针来区分 } Perso原创 2020-09-03 10:25:42 · 145 阅读 · 0 评论 -
C++ class静态成员变量与静态成员函数 static
静态成员变量:所有对象共享同一份数据在编译阶段分配内存类内声明,类外初始化静态成员函数:所有对象共享同一个函数静态成员函数只能访问静态成员变量#include <iostream>using namespace std;class Person{public: int m_a; //非静态成员变量 static int m_age; //静态成员变量 static void func() //静态原创 2020-08-31 11:12:22 · 212 阅读 · 0 评论 -
C++ 深拷贝与浅拷贝——面试经典常见坑
浅拷贝:简单的赋值操作拷贝深拷贝:在堆区重新申请空间,进行拷贝操作浅拷贝带来的问题是堆区内存重复释放。可利用深拷贝解决。#include <iostream>using namespace std;class Person{public: int m_age; int *m_Height; Person(){cout<<"无参构造函数"<<endl;} Person(int age,int height) {原创 2020-08-31 10:07:27 · 163 阅读 · 0 评论 -
C++ 拷贝构造函数介绍
拷贝构造函数调用的三种情况:1.使用一个已经创建完毕的对象来初始化一个新对象2.值传递的方式给函数参数传值3.以值方式返回局部对象#include <iostream>using namespace std;class Person{public: int age; Person() { cout<<"构造函数"<<endl; } Person(int _age) { age原创 2020-08-24 09:35:47 · 61 阅读 · 0 评论 -
C++11 函数重载注意事项
函数重载满足条件:1.在同一个作用于下2.函数名称相同3.函数参数类型不同,或者个数不同,或者顺序不同注意事项:1.引用作为重载条件2.函数重载碰到默认参数#include <iostream>using namespace std;//1.引用作为函数重载void func1(int &a){ cout<<"func1(int &a)"<<endl;}void func1(const int &a){原创 2020-08-20 16:55:06 · 294 阅读 · 0 评论 -
C++ 内存分区: 代码区 全局区 栈区 堆区
1.代码区: 存放函数体的二进制代码,由操作系统进行管理**2.全局区:**存放全局变量和静态变量以及常量,数据在程序结束后由操作系统释放存放内容:全局变量、静态变量、常量区(字符串常量和其他常量)**3.栈区:**由编译器分配和释放,存放函数的参数值,局部变量等**4.堆区:**由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收...原创 2020-08-20 15:29:16 · 219 阅读 · 0 评论