
C++
文章平均质量分 90
wwxjya
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
类和对象
一、类每个类都定义了自己的作用域,每个类的成员函数和成员变量都在这个作用域内,成员函数可以任意访问所在类的其他函数和成员变量(C++的封装特性是对外的,在类内是可以任意调用和使用的);类似于C中的结构体,要访问类定义的对象的成员,类定义的对象可以用‘.’来访问该对象的公有成员,指向对象的指针可以用‘->’来访问其公有成员;类的成员函数既可以在类体中定义,也可以在类体外定义;在类体外定义时,要...原创 2018-03-17 17:46:06 · 127 阅读 · 0 评论 -
模板--类型萃取
当我们在实现数据结构vector时,我们发现使用mencpy时只能实现基本类型的拷贝,而不能实现自定义类型的拷贝,比如说字符串类型。这问题如何解决呢?在学习了模板和基于模板的类型萃取之后,我们就有方法是在实现基本类型的拷贝时使用memcpy,在遇到自定义类型时用for循环来拷贝。#pragma once#include <typeinfo.h>#include <io...原创 2018-05-17 11:28:42 · 239 阅读 · 0 评论 -
实现vector--模板
在这里,我把类函数定义与声明分开了:以下是类定义与类函数的声明:// vector.h#pragma once #include <iostream&...原创 2018-05-17 15:48:18 · 601 阅读 · 0 评论 -
实现list-- 模板
实现一个带头结点的双向带环链表:观察这样一个链表(写出代码如下)://List.h#pragma once #include <assert.h>...原创 2018-05-17 16:02:08 · 733 阅读 · 0 评论 -
模板
1、什么是模板? 模板是泛型编程的基础,泛型编程是指编写与类型无关的逻辑代码,是一种复用的方式。分为模板函数和模板类。2、模板函数、模板类 1)模板函数模板是与类型无关的编程,模板函数的基本使用方法是:template <class 形参名1, class 形参名2, class 形参名n>返回类型 函数名(参数列表){...} 注:class还可以用typename例如:在没...原创 2018-05-17 16:09:29 · 128 阅读 · 0 评论 -
实现stack 和queue--模板类、容器适配器
实现stack:在实现栈的时候,我们都是在顺序表上的特定位置插入删除数据,那么在学习了模板类和容器适配器的概念后,就可以很容易的实现栈了。关于模板:https://blog.youkuaiyun.com/weixin_40417029/article/details/80345464//stack#pragma once ...原创 2018-05-17 16:51:25 · 183 阅读 · 0 评论 -
多态和多态对象模型
一、虚函数&多态虚函数--在类的成员函数前面加上virtual关键字,这个函数就被称为虚函数。虚函数的重写--在子类中定义了一个与父类中虚函数完全相同的函数,则称子类的这个函数重写(覆盖)了这个函数。多态--当我们使用基类的指针或引用调用上面所说的虚函数时,调用的是基类中的虚函数;当使用子类的指针或引用时调用的是子类的虚函数。形成多态的条件--必须是父类的指针或引用;调用的函数必须是虚函数...原创 2018-05-09 19:52:26 · 278 阅读 · 0 评论 -
C++继承
一、什么是继承 继承是面对对象复用的重要手段,继承是类型之间的关系建模。我们通过继承定义一个类,共享共有的东西实现各自不同的功能。我们看一个例子:在这个例子中,可以看到Person类是父类,而Student类是子类;子类以公有的继承关系继承了父类的成员,也就是说父类的成员变成了子类的一部分。那么继承关系对子类中继承到的成员有什么影响呢?答:基类中的私有成员在派生类中不可见,即它的派生类是无法...原创 2018-04-29 18:32:31 · 167 阅读 · 0 评论 -
异常
一、传统处理错误的办法直接终止程序(如段错误等)返回错误码返回一个合法的值,让程序继续进行运行调用一个预先设置好产生错误时要调用的函数--回调函数二、异常处理错误什么是异常?当一个函数发现自己无法处理的错误时,抛出异常,让函数调用者直接或间接的处理这个问题。void fun(){ try { char*a = new char[0x7fffffff]; } catch (except...原创 2018-05-28 18:02:21 · 360 阅读 · 0 评论 -
浅拷贝、深拷贝与写时拷贝
浅拷贝:class String{public: String(const char* str = "") :_str(new char[strlen(str)+1]) { strcpy(_str, str); } String(const String& s) :_str(s._str) {}private: cha...原创 2018-04-05 16:14:16 · 163 阅读 · 0 评论 -
操作符new/delete
一、复习C的内存管理在学习C语言时,我们学习了C语言的内存分配,同时学习了C语言的内存管理函数malloc、calloc、realloc。这三个函数都用来从堆上分配空间,但有略微区别:malloc: 负责开辟开辟空间(按字节开辟)。 void *malloc( size_t size );calloc: 在开辟空间的同时对空间内数据...原创 2018-04-03 17:39:22 · 144 阅读 · 0 评论 -
C++中的引用
一、引用引用不是定义一个新的变量,而是给一个已有的变量起一个别名。类型 &引用变量名 = 已定义过的变量名;注:1)一个变量可以有多个别名; 2)引用必须初始化; 3)引用只能在初始化时引用一次,不能在成为其他变量的别名。#include <iostream>using namespace std;int main(){ int a = 13; ...原创 2018-03-13 17:49:39 · 206 阅读 · 0 评论 -
this指针
我们在调用类中定义的函数时,能发现编译器总能帮我们准确找到要调用的变量,这是怎么回事?那是因为每一个成员函数都有一个隐含的this指针:1)这个指针的名字是固定的,称为this指针,这个指针是隐式的(构造函数比较特殊,没有这个隐含的形参);2)编译器会对成员函数做处理,在对象调用成员函数时,对象的地址做实参传递给成员函数的第一个形参this指针;查看下面代码的汇编:class Date{pub...原创 2018-03-19 10:46:30 · 131 阅读 · 0 评论 -
构造函数
一、构造函数我们知道,在类中,成员变量大多是私有的,如果我们在定义时没有对它们进行初始化,那么打印出来可能会是一些随机值。这时候就需要一个公有成员函数--构造函数帮我们进行数据的初始化了。构造函数是特殊的成员函数,它会有且仅在对象定义时自动执行一次,其特征如下:函数名与类名相同;构造函数无返回值;对象构造或者说实例化时自动执行一次;构造函数可以重载;构造函数可以在类体外,也可以在类体内定义;如果类...原创 2018-03-19 18:09:43 · 195 阅读 · 0 评论 -
初始化列表(深入探索构造函数)
一、类的成员变量有两种初始化方式:一是构造函数体内进行赋值;二是初始化列表进行初始化。初始化列表以一个冒号开始,以逗号分隔数据列表,每一个元素要初始化的值都在括号中。class Date{public: //构造函数(用参数列表进行初始化) Date(int year = 1900, int month = 1, int day = 1) :_year(year) , _month...原创 2018-03-23 19:24:40 · 188 阅读 · 0 评论 -
析构函数
一、定义析构函数是特殊的成员函数,它是在对象的生命周期结束时,C++编译系统会自动调用的一个成员函数。构造函数在定义对象时自动调用,用于对象的初始化;而析构函数在对象的生命周期结束时自动调用,主要做一些清理工作。二、析构函数的特点:析构函数在类名前加上~;析构函数无参无返回值;一个类只有一个析构函数,若未定义析构函数,系统会自动生成一个缺省的析构函数;在定义对象的生命周期结束时,系统会自动调用;析...原创 2018-03-20 17:17:55 · 231 阅读 · 0 评论 -
运算符重载(实现日期类)
对基本的数据类型,都支持+-*/等操作,对于自定义类型,要实现这些操作就要自己编写函数。这时候,C++提供了运算符重载的语法,及简化了调用的代码,又增加了可读性!运算符重载的特征:operator+合法的运算符 构成函数名(eg operator<);运算符重载后,不能改变运算符的优先级/结合性/操作数个数。下图就是改变了操作数的个数导致的错误:注:5个C++不能重载的运算符:.* ...原创 2018-03-20 19:22:19 · 923 阅读 · 0 评论 -
重载与参数缺省
一、命名空间在C语言中,同一作用域内不能出现命名相同的变量;int a = 0;int a = 90;int main(){ //编译时就会出现如下错误: //e:\test.c(12): error C2374: “a”: 重定义;多次初始化 system("pause"); return;}而C++中提供了命名空间(namespace),可以很方便的解决命名冲突的问题。我们可以...原创 2018-03-30 17:39:30 · 208 阅读 · 0 评论 -
const&&运算符的内联&静态成员&友元&N中构造拷贝构造的优化
一、const首先,回顾一下C语言中的const,编译下面的代码可以得到结论,权限不可以被放大,只能被缩小!在C++中,同样的,权限也只可以被缩小,但不能被放大。class AA{public: AA(int a = 1, int b = 1, int c = 1) :_a(a) , _b(b) , _c(c) {} void show() { class AA{ ...原创 2018-03-27 20:35:32 · 158 阅读 · 0 评论 -
智能指针
一、智能指针概述 所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。 从实现角度,智能指针就是RAII思想的一种实践;从使用角度,智能指针就像指针一样。这样像是在代码逻辑中因为引入异常而可能忘记释放申请的指针指向的内存的问题就可以很好地解决了。在遇到像定义了一个自定义类对象,又定义了一个指针指向它时会造成的析构多次的问题也可以通过智能指针很好地解决。 RAII(Re...原创 2018-06-09 18:13:58 · 192 阅读 · 0 评论