![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
BroWuG
我爱大自然
展开
-
C++继承(私有,保护,多重,钻石,虚)
私有继承,保护继承使用 private 方式继承父类public->private其他不变这种继承方式可以防止父类成员的扩散使用 protected 方式继承父类public->protected其他不变可以有限防止父类成员的扩散子类以private/protected方式继承会禁止向上造型(进行类型转换),子类的指针或引用不能隐式转换成父类的指针或引用...原创 2019-08-23 18:26:58 · 219 阅读 · 0 评论 -
C++类的继承
类的继承共性与特性表达不同类型事物之间共有的属性与行为个性用于刻画每种事物特有的属性和行为共性表示为父类(基类),个性表示为子类(派生类)子类继承自父类基类派生出子类继承的基本语法继承表一个子类可以同时继承0到多个父类,每个父类的继承方式可以相同也可以不同class 子类:继承方式1 父类1,继承方式2 父类2,...{}继承方式public 共有...原创 2019-08-20 20:56:06 · 239 阅读 · 0 评论 -
C++3种继承方式与访问权限
3种继承方式与父类成员访问权限父类成员在不同作用域的访问权限父类成员内部子类外部友元子类对象(public继承)子类对象(protected继承)子类对象(private继承)public✔✔✔✔✔✘✘protected✔✔✘✔✘✘✘private✔✘✘✔✘✘✘三种继承方式的子类对象属于外部访问子类对...原创 2019-08-20 20:05:03 · 244 阅读 · 0 评论 -
C++父类与子类间构造,析构,拷贝的调用关系
C++父类与子类间构造,析构,拷贝的调用关系构造子类的构造在执行它的构造函数前会根据继承表的顺序执行父类的构造函数默认执行无参构造#include <iostream>#include <stdio.h>#include <cstring>using namespace std;class Base{ char *str;pu...原创 2019-08-20 19:15:01 · 1590 阅读 · 0 评论 -
C++ 异常处理
异常处理抛出异常throw数据抛异常对象抛基本类型注意 不能抛出局部指针或引用注意 如果异常没有被捕获处理,程序就会被停止捕获异常 try{ 可以抛出异常的代码 } catch()//根据数据类型进行捕获 { 处理异常,如果无法处理,可以继续抛出异常 }注意 捕获异常的顺序是自上而下的,而不是最精准的匹配,针对子类异常...原创 2019-08-24 16:20:16 · 369 阅读 · 0 评论 -
C++typeid
类型信息 typeid用于获取数据的类型信息,返回type_info类型临时对象name成员函数,可以获取类型的名字,内建类型名字使用缩写同时还支持 == != 运算符,用来比较是否是同一类型如果用于判断父子类的指针或引用,它不能准确判断出实际的对象类型,但可以判断出具有多态基础的关系的父子类的指针或引用,它的实际类型的对...原创 2019-08-24 16:19:15 · 483 阅读 · 0 评论 -
C++ I/O流
I/O流流的打开模式:ios::app 打开文件,用于追加,不存在则创建,存在不清空ios::ate 打开时定位到文件末尾ios::binary 以二进制模式进行读写ios::in 以读权限打开文件,不存在则失败,存在不清空ios::out 以写权限打开文件,不存在则创建,存在则清空ios::trunc 打开文件时清空fstream/istream/ostream类用于文件...原创 2019-08-24 16:17:14 · 185 阅读 · 0 评论 -
C++强制类型转换
强制类型转换C++中为了兼容C语言,(目标类型)源类型依然可以使用,但C语言中的强制类型转换安全性差,因此建议使用C++中的强制类型转换C++之父认为如果代码设计的完善,根本不需要用到强制类型转换,而C++的强制类型转换之所以很复杂,是为了让程序员多关注代码本身的设计,尽量少使用C++中的强制类型转换保证没有很大的安全隐患static_cast<目标类型>(源类型)编译器...原创 2019-08-24 16:15:22 · 271 阅读 · 0 评论 -
C++string类的手动实现
#ifndef STRING_H#define STRING_H#include <iostream>#include <cstring>using namespace std;class String{ char* str;public: //构造 String(const char* str = NULL) { ...原创 2019-08-24 16:03:48 · 338 阅读 · 0 评论 -
C++虚析构
虚析构当使用delete释放一个父类指针时,不管实际指向的对象是子类还是父类,都只会调用父类的析构函数(多态肯定会出现的问题)如果子类的析构函数有需要释放的内存,就会造成内存泄漏为了解决这个问题,可以把父类的析构函数设置为虚函数(析构函数进行覆盖时不会比较函数名)当父类的析构函数为虚函数时,通过父类指针或引用释放子类对象时会自动调用子类的析构函数,子类对象的析构函数执行完成后也会调用父类...原创 2019-08-24 15:28:40 · 366 阅读 · 0 评论 -
代码详解C++虚函数表
虚函数表在C++类中,一旦成员函数中有虚函数,这个类中就会多一个虚函数表指针,这个指针指向一个虚函数表,表里记录了这个类中所有的虚函数,当这个类被继承,它的子类中也会有一个虚函数表(不管子类中有没有虚函数),如果子类的成员函数中有函数签名与父类的虚函数一样就会用子类中的函数替换它,在虚函数表中的位置,这样就达到了覆盖的效果当通过类指针或应用调用函数时,会根据对象中实际的虚函数表记录来调用函数...原创 2019-08-24 15:18:31 · 259 阅读 · 0 评论 -
C++虚函数,覆盖,多态
虚函数,覆盖,多态虚函数成员函数前加virtual关键字覆盖子类中会覆盖父类中的虚函数#include <iostream>using namespace std;class Base{public: /*virtual*/void func(void) { cout << "我是Base的func函数"...原创 2019-08-23 18:34:17 · 365 阅读 · 0 评论 -
STL 函数模板,类模板
模板为什么使用模板C/C++是一种静态类型语言(预处理->汇编->编译->链接),好处是速度快,缺点是实现通用代码麻烦,例如:实现支持所有类型的快速排序借助函数重载实现通用代码,好处是实现简单,但代码段会增加借助宏函数来实现通用代码,类型检查不严格借助回调函数实现通用代码,使用麻烦由于以上原因,C++之父在C++中实现了模板技术,让C++能够支持泛型编程函数模板...原创 2019-08-26 20:34:23 · 261 阅读 · 0 评论