![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 88
Nicole xu
这个作者很懒,什么都没留下…
展开
-
C++--实现简单的复数类
#include<iostream>using namespace std;class Complex { public: //构造函数 Complex(double real=0.0,double image=0.0) :_real(real) ,_image(image) {} //拷贝构造函数 Complex(const Complex& c)...原创 2017-07-20 20:36:47 · 1488 阅读 · 0 评论 -
C++ --类的默认成员函数是否可以被定义为虚函数
构造函数不能定义为虚函数1.因为虚函数是存放在对象的虚表里面,如果将构造函数定义为虚函数,则构造函数也必须存放在虚表里面,但是此时对象都还没有创建也就没有所谓的虚表。 2.不将构造函数定义为虚函数,对象模型如下: 3.如果将构造函数定义为虚函数:(直接会编译错误) 最好不要将operator=定义为虚函数虽然operator=不会构成重写(因为父类与子类的operato...原创 2018-05-27 20:21:06 · 3317 阅读 · 0 评论 -
C++ -- 四种类型转换
C++四种类型转换的引入1.在C语言中也有类型转换 ①例1:相近类型之间可进行隐式类型转换 int a = 10; double b = a; //将int转换为double,然后赋值给b②例2:不相近类型可以进行强制类型转换 int a = 10; int *p = (int*)a; //将int强转为int*对于强制类型转换来说,有...原创 2018-06-14 12:07:46 · 834 阅读 · 0 评论 -
C++ -- 模板的基础知识
模板的由来1.对于交换函数Swap来说, (1)如果用于交换两个整型,则代码如下:void Swap(int* a, int* b){ int temp = *a; *a = *b; *b = temp;}(2)当用于交换两个整型指针时,代码如下:void Swap(int** a, int** b){ int* temp...原创 2018-06-01 16:59:45 · 331 阅读 · 0 评论 -
C++ -- 模板的特化与类型萃取
模板的特化1.定义:模板的特化就是特殊化 2.例如:对于一个模板类来说,可能对于某个特定的类型里面会有特殊的处理方式,这样就可以对该类型进行一个特化。 3.特化分类 ①全特化 ②偏特化全特化1.将模板参数全部写出来; 2.例如:template &amp;amp;amp;amp;lt;class T1, class T2&amp;amp;amp;amp;gt;class Data{public: Data() ...原创 2018-06-01 17:16:14 · 758 阅读 · 0 评论 -
C++ -- 模板与分离编译
什么是分离编译1.将一个函数或类的声明放在.h文件里面,将其代码实现放在同名的.cpp里面,当调用该函数时,该函数就会进行分离编译。 2.以add函数为例:(定义一个函数Add,将其函数声明放在Add.h里面,将其实现放在Add.c(与头文件同名)里面,当在Test.cpp里面调用时,会正确运行。 Add.h#include&amp;amp;lt;iostream&amp;amp;gt;using namespac...原创 2018-06-01 18:14:39 · 620 阅读 · 1 评论 -
C++ -- 智能指针( C++11与boost库的智能指针及其使用)
一.智能指针的引入 1.在动态内存管理中,如果new上一块空间,但是没有delete,就会产生内存泄露的问题。 2.但是有时候,我们new了,也delete了,但是还会出现问题。例如在new和delete之间调用了某个抛异常的函数,就有可能导致没有执行delete。 例如:fun2里面使用了new[],最后也使用了delete[],看着没有问题,但是在new和delete之间调用了fun1,...原创 2018-06-08 17:22:15 · 2910 阅读 · 0 评论 -
C++ -- 智能指针(自己模拟实现简单的智能指针)
上一篇文章介绍了智能指针的基本概念及boost库里基本的智能指针,这里主要模拟实现库里面的智能指针(简单实现)。auto_ptr1.auto_ptr具有RAII和像指针一样的特点。 2.模拟实现:template&amp;amp;lt;class T&amp;amp;gt;class Auto_Ptr{public: //RAII Auto_Ptr(T* ptr) ...原创 2018-06-08 19:42:47 · 9115 阅读 · 0 评论 -
C++ -- 异常
传统的错误处理方式1.错误码; 2.终止程序; 3.调用预先设置的回掉函数。传统错误处理方式的缺点1.如果返回错误码,用户必须要通过查看错误码对应的文字描述才能清楚错误,并且这种错误码表示的意义必须明确且唯一。 2.在某个大工程里面,如果由于某个错误而导致终止程序,本来这个错误可以容忍,但是程序终止就会导致正确的程序也无法正常的执行。异常1.异常:异常是程序在执行...原创 2018-06-02 10:27:06 · 204 阅读 · 0 评论 -
C++--定义一个不能被继承的类/只能在栈上或堆上生成对象的类
定义一个不能被继承的类思路:(1)将父类的构造函数定义为私有的(因为子类的构造函数是合成版本所以会调用父类的构造函数,而父类的构造函数是私有的,则子类就不能构造出对象); (2)但是这种方式会有一个问题,因为父类的构造函数是私有的则父类也构造不出来对象。 (3)为了解决父类构造不出来对象的问题,则可以在父类定义一个GetObject方法,里面调用父类的构造函数,则可以通过调用Get...原创 2018-05-27 19:50:00 · 462 阅读 · 0 评论 -
C++ -- 动态内存管理
C语言的动态内存管理C语言使用malloc/calloc/realloc进行空间开辟,使用free进行空间的释放。malloc(1)函数形式:void* malloc (size_t size) (2)参数:开辟空间的字节数; (3)返回值:返回一个指针,它指向新开辟空间的起始位置。 注意:malloc只开辟空间,并没有对数据进行初始化。calloc(1)函数形式...原创 2018-05-07 14:45:35 · 243 阅读 · 0 评论 -
C++ -- 类和对象之const成员函数,inline函数,友元,static成员
const成员函数基础知识1.定义 const成员函数是在类的成员函数后面加上const关键字,const修饰的是this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变。 2.例子class Date{public: Date(int year, int month, int day) :_year(year) ...原创 2018-05-06 21:23:51 · 399 阅读 · 0 评论 -
C++ -- 基础小知识(命名空间、函数重载、缺省参数)
一.命名空间1.为什么要有命名空间为了解决全局域上命名冲突的问题。2.语法namespace AA1{ int a = 10 int b = 20;}namespace AA2{ int a = 30; int b = 40;}注意:在C语言中花括号里面的内容也属于一个域(例如下面在main函数里定义了两个a,因为两个a在不...原创 2017-07-24 14:03:59 · 519 阅读 · 0 评论 -
C++ -- 引用的详解
一.引用1. 定义:引用为对象起了另外一个名字,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:int a = 1024;int &b = a;其中b就是a的另一个名字。2. 一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用与它的初始值“绑定”在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值一直绑...原创 2017-11-16 21:07:51 · 237 阅读 · 0 评论 -
C++ -- 面向对象之继承
一.继承的概念1.继承的定义:继承是一种复用手段,通过继承关系,子类可以从父类获得一些成员变量或成员函数,共享公有的东西,实现各自本质不同的东西。2.继承的书写:在子类的类名后面加上":"再加上继承关系,再加上父类的名字。class Person{private: string _name;};class Student : public Person //...原创 2018-04-20 23:29:49 · 183 阅读 · 0 评论 -
C++ -- 虚函数与多态
虚函数1.定义:在一个类的成员函数前面加上virtual关键字; 2.如果一个函数不是类的成员函数,则该函数不能定义为虚函数。(即就是类外面不能使用virtual关键字)虚函数中有一个特殊的虚函数:纯虚函数纯虚函数与抽象类1.纯虚函数:在虚函数的后面加上=0;virtual void Display() = 0;2.包含纯虚函数的类称为抽象类,抽象类不能实例化...原创 2018-05-09 16:20:53 · 188 阅读 · 0 评论 -
C++ -- 多态场景下探索C++对象模型
单继承对象模型1.单继承代码class Base{public: virtual void fun1() { cout &amp;amp;amp;lt;&amp;amp;amp;lt; &amp;amp;quot;Base::fun1()&amp;amp;quot; &amp;amp;amp;lt;&amp;amp;amp;lt; endl;原创 2018-05-09 18:04:26 · 250 阅读 · 0 评论 -
C++ -- 探索虚函数表
一.虚函数表1.虚函数:类的成员函数前面加上virtual关键字。2.虚函数表:用来存放虚函数地址的一张表。3.虚函数表就像一张地图,指明了要调用的虚函数。二.虚函数表的小知识1.一个类中只要含有虚函数,则一定会生成一张虚表。(1)一个类中含有虚函数,其对象监视窗口如下,可以看到A类的对象a1中含有一个虚表指针(_vfptr),这个虚表指针指向了一个虚表,虚表里面含有两个元...原创 2018-05-03 16:20:36 · 157 阅读 · 0 评论 -
C++ -- N种构造 / 拷贝构造的优化
以日期类为例日期类的代码如下(只包含4个默认成员函数,为了便于观察结果所以在4个成员函数里面输出一些语句):class Date{public: Date() { cout &amp;lt;&amp;lt; &quot;Date()&quot; &amp;lt;&amp;lt; endl; } Date(const Date&原创 2018-05-05 21:45:57 · 252 阅读 · 0 评论 -
C++ -- 重载、重定义、重写的区别
一.重载1.在同一个作用域下,函数名相同,函数的参数不同(参数不同指参数的类型或参数的个数不相同)2.不能根据返回值判断两个函数是否构成重载。3.当函数构成重载后,调用该函数时,编译器会根据函数的参数选择合适的函数进行调用。4.构成重载的例子:#include<iostream>using namespace std;int Add(int a, int b){ return...原创 2018-04-28 11:12:00 · 10169 阅读 · 0 评论 -
C++ -- 深浅拷贝
浅拷贝1.例如对于下面的String类,它包含一个成员变量,一个char*的指针:class String{private: char* _str;};2.对于String类的拷贝构造函数及operator=函数来说,当用一个String对象拷贝构造或赋值给另一个String对象时,就是将这个对象里的指针的值赋值给另一个对象里的指针。将一个指针值赋值给另一个指针,就会...原创 2018-06-02 12:33:53 · 14564 阅读 · 8 评论