
C++
Emily静
无愧于心
展开
-
类的默认成员函数
类的默认成员函数 构造函数 构造函数是为了初始化在类中定义的私有成员变量,且在定义创建对象时自动执行一次的公有成员函数。 专属特征: 1>,构造函数的函数名与类名相同,且无返回值; 2>,构造函数定义在类内类外都是可以的,定义在类外时要用 :: 进行说明是哪个类; 3>,构造函数支持重载; 4>,构造函数是特殊的成员函数没有隐含的this形参; 5>,构造函数在实例化对象是自动调用,原创 2017-10-07 08:57:54 · 493 阅读 · 0 评论 -
如何限制一个类对象只在堆上或栈上建立
类对象的创建在栈上: 静态分配类对象:编译器直接调用类的构造函数,挪动栈顶指针为对象分配适当的内存空间。 所以要使类对象建立在栈上就必须采用静态分配类对象的方法(直接调用类的构造函数),禁用new运算符 (new首先要调用operator new为对象在堆上分配合适的内存的内存,再调用类的构造函数进行初始化) 将operator new函数声明成私有,这时operator delete函数也应...原创 2018-02-25 18:45:02 · 1122 阅读 · 0 评论 -
C++ dynamic_cast
dynamic_cast是一个运算符: dynamic_cast(expression) :将expression转换成type-id类型的对象;type-id可以是指针也可以是引用,expression的类型应该和其相对应。 应用: dynamic_cast用来决定某对象是否归属继承体系中的某个类型,根据基类指针或 引用是否真正指向继承类指针或引用做出相应处理。主要用于类之间的上行转换和原创 2018-02-03 10:28:40 · 356 阅读 · 0 评论 -
C++智能指针
智能指针:存储指向动态分配对象指针的类。 满足的条件:具有RAII思想,能够像指针一样(运算符的重载,解引用,指向对象成员),正确的资源管理。 RAII思想(资源分配及初始化):定义一个类来封装资源的分配和释放,构造函数中完成资源的分配和初始化,析构函数中完成资源的清理,可以保证资源的正确初始化和释放。 引入智能指针的目的是什么呢? 这里给出一段代码:void func() { in原创 2017-12-06 15:59:11 · 1384 阅读 · 0 评论 -
模板的类型萃取
铺垫一下萃取的基础点: POD:指C风格的struct结构体定义的数据结构,且struct结构体中只能含有常规的数据类型,不能函数自定义类型; 函数重载:参数名相同,参数列表不同,返回类型可相同可不相同; 模板的特化:模板参数在某个特定类型的具体实现,分为全特化和偏特化。 类模板特化:template <class T1 , class T2> class Date { public原创 2017-12-02 11:17:53 · 570 阅读 · 0 评论 -
模板的分离编译
模板 模板是编写与类型无关的逻辑代码(泛型编程),是复用的一种方式。 模板类形式: template<class/typename 形参名>; class 类名 {……};模板函数形式:template<class/typename 形参名>; 函数类型 函数名(参数列表) {……}分离编译 一个项目由多个源文件组成,每个源文件会单独编译成各自的目标文件,通过链接将各个源文件的目标文原创 2017-12-01 08:48:06 · 447 阅读 · 0 评论 -
探索多态模型—菱形继承和菱形虚拟继承
菱形继承 类AA被类BB和类CC重复继承:class AA { public: virtual void a(){ cout << "AA::a()" << endl; } virtual void a1(){ cout << "AA::a1()" << endl; } public: int _a; };class BB : public AA { public:原创 2017-11-30 17:52:09 · 661 阅读 · 0 评论 -
C++动态内存管理(比较C动态内存管理)
首先我们先了解一下内存:C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存。 介绍new/delete,new[]/delete[]之前我们先了解一下operator new,operator delete,operator new[],operator delete[]函数。注:这些函数并没有重载new/delete表达原创 2017-11-04 22:22:37 · 2597 阅读 · 1 评论 -
探索多态和多态对象模型—单一继承&多重继承
1.什么是多态?谈到多态,我们必须首先了解一下什么是虚函数。虚函数:在类的成员函数前加virtual关键字,把这个成员函数称为虚函数。 多态需满足两个条件: 子类的虚函数须覆盖(重写)父类的虚函数;(协变例外) 当使用基类的指针或引用调用重写的虚函数时,指向基类对象就调用基类的虚函数,指向派生类的对象就调用派生类的虚函数。 注:多态只与对象有关,与类型无关。 扩充:虚函数重写(覆盖):原创 2017-11-28 22:30:24 · 797 阅读 · 0 评论 -
C++菱形继承+虚继承
单继承和多继承 单继承:一个派生类只有一个直接基类。 (B的直接父类只有A,是单继承)class AA { public: AA(int a=1) :_a(a) { cout << "AA()" << endl; } int _a; };class BB : public AA { public: BB(int b=2) :_原创 2017-11-05 15:26:45 · 441 阅读 · 0 评论 -
论构造函数和拷贝构造函数的调用情况(优化)
构造函数是在对象创建的时候调用的,拷贝构造函数是用已经建立好的对象来初始化新对象,那么拷贝构造函数在什么情况下还可以调用呢?1,对象作为参数以值传递形式传入函数体; 2,对象作为返回值一值传递形式从函数体返回。那么重点来了。。。编译器进行优化是在什么情况下呢?没错,就是基于以上两种情况。 下面根据实例详细说明:Test1中调用了 2 次AA的拷贝构造函数, 1 次AA的赋值运算符函数的重载。a1原创 2017-10-24 21:35:39 · 624 阅读 · 0 评论 -
引用计数+写时拷贝
在我的理解来看,引用计数可以解决一块空间被多次释放的问题;写时拷贝可以解决一个对象内容改变影响另一个对象内容的问题。 针对一个对象空间有多个引用计数的问题,不会被多次释放。 用静态的引用计数变量(只适合有一个对象空间) #include<iostream> using namespace std;class String { public: String(const char*str =原创 2017-10-30 21:28:39 · 367 阅读 · 0 评论 -
深浅拷贝
浅拷贝:当调用拷贝构造函数后,两个对象指向一块空间。#include<iostream> using namespace std; class String { public: String(const char* str ) //构造函数 :_str(new char[strlen(str)+1]) { strc原创 2017-10-25 18:13:52 · 233 阅读 · 0 评论 -
类和对象基础
面向对象的三大特点:封装、继承、多态类和对象的关系 1>,类是对象的抽象,对象是类的实例化; 2>,定义一个类并没有分配实际的内存空间进行存储,而对象占有内存空间。 植物——类 松树——对象类的声明和对象的定义 首先介绍一些基础知识 访问限定符: public : 公有访问限定符; private : 私有访问限定符; protected : 受保护的访问限定符。 注: 1>,原创 2017-10-06 11:07:55 · 347 阅读 · 0 评论 -
C++零碎基础知识点(一)
命名空间 C++中命名空间是为了解决全局命名冲突的问题,可以在一段程序中定义相同的变量名。 一般格式:namespace variable_name1 { int ret=0; } namespace variable_name2 { int ret=8; }C++中std名字空间中声明和定义了标准C++库中的所有组件;使用有两种方法: 1>,用using指示符:using n原创 2017-09-27 21:32:21 · 434 阅读 · 0 评论 -
运算符的重载
函数名:operator 运算符 运算符重载之后不能改变运算符的优先级,结合性,运算符操作数的个数。 注:不能重载的运算符 指针访问运算符( .* ) ; 与运算符( :: ) ; 大小运算符( sizeof ) ; 条件运算符( ?:);成员运算符(.). #include #include #include using namespace std; class Date {原创 2017-10-18 19:47:54 · 429 阅读 · 0 评论 -
STL----map和set常用接口的使用
map和set属于关联容器,关联容器是将值与键关联在一起,并使用键来查找值。底层实现是红黑树,提供对数据的快速访问。 map和set都不允许插入相同的元素,利用这个特性可以达到去重的目的。 ‘ map ’ 使用map需包含头文件#include<map>,map是K ,V存储模式(键值对),map的V是一个pair类型,pair可以通过进行pair.first或pair.seco...原创 2018-04-14 10:42:40 · 255 阅读 · 0 评论