C++
文章平均质量分 70
SUSU0203
这个作者很懒,什么都没留下…
展开
-
C++编程
写在前面:作为一位编程小白,一位勇敢走在晋级路上的编程小白,我希望能用博客记录自己进步的过程,同时将学习笔记分享出来,和各位朋友共同进步。让我们跟随侯捷老师的脚步,一起开始C++的学习吧! C++面向对象程序设计(Object Oriented Programming, OOP) 学习C++,C++语言是基础,但要成为一个优秀的C++程序猿,还要学会用C++标准库( C++ ...原创 2017-12-06 10:52:46 · 244 阅读 · 0 评论 -
Conversion Function转换函数
C++中可以将对象进行类型转换,如下程序所示:#include<iostream>class Fraction//分数 { public: Fraction(int num, int den = 1) : m_numerator(num), m_denominator(den) {} operator double() const { //retu...原创 2018-05-07 16:26:13 · 491 阅读 · 0 评论 -
C++中的explicit关键字
我们在用C++实现分数的时候,除了可以用conversion function转换函数将Fraction对象转换成double型(分子除以分母),还可以用non-explicit-one-argument ctor函数,只有一个实参的非明确函数,进行类型转换。程序如下所示:#include<iostream>class Fraction{public: Frac...原创 2018-05-21 11:43:50 · 385 阅读 · 0 评论 -
C++之Function-Like Classes,仿函数
C++中构造的类像函数,首先我们需要清楚函数有哪些特点。函数由返回类型,函数名称,参数(小括号,作用在函数名上)和函数主题组成。小括号内含参数这部分也称作function core operator,函数调用操作符。如果有个东西能接受小括号,那它就是函数function,或者仿函数function-like。 下面的代码实现了仿函数的使用:template <class T1,...原创 2018-05-28 11:55:41 · 761 阅读 · 0 评论 -
C++之Pointer-Like Classes
C++中构造的类一般会像两种东西,像指针(称为pointer-like classes,指针类),或者像函数(称为function-like classes)。一个类被设计成指针,被当作指针来使用,是因为我们想在传统指针的基础上多实现功能,或者说想对指针有更多的控制。常见的指针类有两种:智能指针和迭代器。 关于智能指针 C++中常见的智能指针有auto_ptr,scoped_p...原创 2018-05-23 15:46:27 · 374 阅读 · 0 评论 -
浅谈namespace
namespace即“命名空间”,命名空间是用来组织和重用代码的。之所以会有这一概念,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都不重名。对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数,使用起来就会有问题。通过使用namespace xxx;所使用的库函数或变量就是在该命名空间中定义的,这样一来就不会引起必要的冲突了。 取名规则 ...原创 2018-05-28 20:08:49 · 1082 阅读 · 0 评论 -
C++之模板template
C++中的模板可以分为三类:class template,function template,member template。 类模板Class Templatetemplate<typename T>class complex{public: complex(T r = 0, T i = 0) : re(r), im(i) {} complex&a...原创 2018-05-28 22:44:51 · 329 阅读 · 0 评论 -
Specialization模板特化
C++中的模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称为模板的具体化,分别有函数模板特化和类模板特化。 类模板特化示例如下:#include<iostream>using std::cout;using std::endl;template<class Key>struct hash{ };...原创 2018-05-29 23:07:31 · 346 阅读 · 0 评论 -
Partial Specialization模板偏特化
在上一篇博客中,我们介绍了模板的全特化。这里,我们将继续介绍模板的偏特化。偏特化包括两种,个树的偏和范围的偏。 个数的偏 如果模板参数有两个,你想绑定其中一个,这就实现了模板的偏特化。但需要注意的是,要按顺序从左到右绑定模板参数,不能跳跃式绑定第一三五个模板参数。template<typename T, typename Alloc=...>class vecto...原创 2018-06-07 21:57:39 · 1063 阅读 · 1 评论 -
Template Template Parameter模板模板参数
所谓模板模板参数,意思是模板的参数又是一个模板,例如:template<typename T, template<typename U> class Container>class XCls{private: Container<U> c;public: ...};其中,第一个模板参数是类型T,第二个参数是一个Container容器,它...原创 2018-06-08 11:13:25 · 3571 阅读 · 0 评论 -
C++标准库
Algorithms+Data Structures=Programs算法+数据结构(容器)=程序原创 2018-06-08 11:49:32 · 311 阅读 · 0 评论 -
重载、覆盖与隐藏
a.成员函数被重载的特征:(1)相同的范围内(在同一个类中)(2)函数名字相同(3)参数不同(4)virtual关键字可有可无b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于基类和派生类)(2)函数名字相同(3)参数相同(4)基类函数必须有virtual关键字c.隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时...原创 2018-04-13 17:22:33 · 174 阅读 · 0 评论 -
虚函数与多态
C++的多态性包括:(1)编译时多态(静态多态):函数重载、运算符重载、模板实现(2)运行时多态(动态多态):虚函数实现 虚函数的概念: 在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。用法格式:virtual 函数返回类型 函数名 (参数表) {函数体} 。作用为通过指向派生类的基类指针或引用来操作对象。 Inheritance(继承)with...原创 2018-04-13 16:46:40 · 220 阅读 · 0 评论 -
参数传递与返回值
在C++中,如果声明类的成员函数时,在参数列(小括号)之后函数体(花括号)之前,加上修饰符const,则称该成员函数为类的常量成员函数。我们来看下面这个示例程序:class complex{public: complex (double r = 0, double i = 0) : re (r), im (i) { } complex& operator +...原创 2018-03-22 23:06:17 · 541 阅读 · 0 评论 -
头文件与类的声明
我们在开始学习C++时,就应该养成规范大气的编程习惯,头文件(header)的布局就是其中很重要的一个点。我们需要知道头文件中的防卫式声明。#ifndef __COMPLEX__#define __COMPLEX__//前置声明(forward declarations)#include<cmath>class ostream;class complex;com...原创 2018-03-21 12:33:21 · 4636 阅读 · 1 评论 -
操作符重载与临时对象
在C++中,操作符重载的意思就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。C++中有许多内置的数据类型,如char,int,float等,每一种类型都有许多运算符,如加、减、乘、除等。当用户定义了类的对象时,对象之间是不能直接使用这些运算符进行操作的,比如复数的加法。没有重载+运算符,编译器是不知道将复数的实部和实部相加,虚部和虚部相加的。这就是操作符重...原创 2018-03-25 18:35:09 · 459 阅读 · 0 评论 -
复数类的实现
#ifndef __MYCOMPLEX__#define __MYCOMPLEX__//前置声明class complex; complex& __doapl (complex* ths, const complex& r);complex& __doami (complex* ths, const complex& r);complex&am...原创 2018-03-25 18:41:03 · 450 阅读 · 0 评论 -
三大函数:拷贝构造,拷贝赋值,析构函数
在C++中,对于一个空的类,编译器一般会默认它有4个成员函数:构造函数、析构函数、拷贝构造函数、拷贝赋值函数。class String{public: String(const char* cstr = 0);//构造函数 String(const String& str);//拷贝构造函数 String& operator= (const String&a...原创 2018-03-25 22:43:36 · 725 阅读 · 0 评论 -
构造函数
类的构造函数(construction function)是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的特性有以下几点: (1)构造函数名和类名完全相同; (2)没有返回值(void也算返回值); (3)构造函数创建对象的时候调用构造函数; (4)默认的构造函数没有参数(如果自己写了构造函数,默认的构造函数不存在), ...原创 2018-03-21 21:45:29 · 327 阅读 · 0 评论 -
堆、栈与内存管理
C++的内存区域分为五个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 (1)Stack(栈),是存在于某作用域(scope)的一块内存空间(memory space)。例如当你调用函数,函数本身即会形成一个stack用来放置它接收的参数,以及返回的地址。在函数本体内声明的任何变量,其所使用的内存块都取自上述stack。 (2)Heap(堆),或称system he...原创 2018-04-02 23:02:50 · 338 阅读 · 0 评论 -
C++中的static使用方法
一、静态数据成员(static data members) 在介绍静态数据成员之前,我们先来看看普通的数据成员(data members):class complex{public: double real() const {return this -> re;} //在成员函数的参数列表(小括号)中,有隐藏的参数this pointer,是不能写出来的。private: ...原创 2018-04-10 11:55:49 · 2354 阅读 · 0 评论 -
组合与继承
在面向对象编程(OOP)和面向对象设计(OOD)中,类与类之间有三大关系,分别是继承(Inheritance)、复合(Composition)和委托(Delegation)。一、Composition(复合),表示has-atemplate <class T, class Sequence = deque<T>>class queue{ ...protec...原创 2018-04-10 16:10:00 · 197 阅读 · 0 评论 -
String类的实现
#ifndef __MYSTRING__#define __MYSTRING__class String{public: String(const char* cstr=0); String(const String& str); ...原创 2018-04-03 19:14:26 · 150 阅读 · 0 评论 -
C++三个主题
Variadic Templates(since C++11)数量不定的模板参数 我们之前所见的模板参数都是确定的有限个,其实从C++11开始,也允许模板参数不确定。#include<iostream>#include<bitset>using std::cout;using std::endl;using std::bitset;void print(...原创 2018-06-08 16:35:44 · 710 阅读 · 0 评论