![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 82
c++
China_JerryYuan
这个作者很懒,什么都没留下…
展开
-
C++学习笔记——几个特殊的成员函数
我们设计的类中,C++可能会给我们默认添加一些函数:默认构造函数 默认析构函数 拷贝构造函数 拷贝赋值函数 地址运算符函数 移动构造函数(C++11) 移动赋值函数(C++11)下面来分别讲一下这几个函数的功能、这些函数在什么情况下被调用以及是否应该重载这些函数。1.默认构造函数如果程序员定义的类中没有提供任何构造函数,编译器将会自动为类添加一个构造函数。编译器添加的这...原创 2021-09-04 23:38:39 · 211 阅读 · 0 评论 -
函数模板
2、函数模板(1)为什么引入函数模板?考虑下面两个需求:交换两个整型变量的值的Swap函数:void Swap(int & x,int & y){ int tmp = x; x = y; y = tmp;}交换两个double型变量的值的Swap函数:void Swap(double & x,double & y){ double tmp...原创 2019-12-12 19:21:21 · 149 阅读 · 0 评论 -
处理类与类之间的关系
1、类与类之间的关系没关系继承关系(is-a)组合关系(has-a)委托关系2、如何处理类与类之间的关系原则:如果两个类没关系,就不必考虑。如果两个类有关系, 如果满足is-a关系,那么就使用继承。如果两个类有关系, 如果满足哈市has-a关系,那么就使用组合。如果两个类有关系,但是既不是is-a关系,又不是has-a关系,这个时候就要考虑委托关系了。...原创 2019-12-04 11:15:15 · 160 阅读 · 0 评论 -
类模板
1、什么是类模板?在定义类的时候,加上一个多个类型参数。在使用类模板时,指定类型参数应该如何替换成具体类型,编译器据此生成相应的模板类。2、为什么引入类模板?我们常见的一种数据类型:数组。由于数据存储的数据的类型不同,他们可以细分为:整数数组、结构数组、字符串数组等等。我们可以将数组及其上的操作抽象成一个类。而大多时候,我们对于数组的操作是类似的:查看数组长度获取其中一个元素对其中...原创 2019-12-12 19:47:49 · 283 阅读 · 0 评论 -
类模板与静态成员变量
类模板与静态成员变量原创 2019-12-16 16:33:26 · 267 阅读 · 0 评论 -
类模板与派生
概述类模板从类模板派生类模板从模板类派生类模板从普通类派生普通类从模板类派生1、类模板从类模板派生template <class T1,class T2>class A { T1 v1; T2 v2;};template <class T1,class T2>class B:public A<T2,T1> { T1 v3; T2 v4...原创 2019-12-12 20:04:21 · 424 阅读 · 0 评论 -
模板与友元
概述函数、类、类的成员函数作为类模板的友元函数模板作为类模板的友元函数模板作为类的友元类模板作为类模板的友元1、函数、类、类的成员函数作为类模板的友2、函数模板作为类模板的友元3、函数模板作为类的友元4、类模板作为类模板的友元...原创 2019-12-12 20:07:01 · 239 阅读 · 0 评论 -
流操纵算子
流操纵算子••••整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子原创 2019-12-10 21:51:03 · 515 阅读 · 0 评论 -
文件读写
1、文件的基本内容(1)文件和流的关系可以将顺序文件看作一个有限字符构成的顺序字符流,然后像对cin, cout 一样的读写。(2)创建文件方式一:创建时直接关联文件(初始化)#include <fstream> // 包含头文件 ofstream outFile(“clients.dat”, ios::out|ios::binary);//创建文件参数:clie...原创 2019-12-11 15:26:57 · 227 阅读 · 0 评论 -
输入输出相关的类
1、与读写相关的类的继承关系图2、继承关系图数类的简介istream是用于输入的流类,cin就是该类的对象。ostream是用于输出的流类,cout就是该类的对象。ifstream是用于从文件读取数据的类。ofstream是用于向文件写入数据的类。iostream是既能用于输入,又能用于输出的类。fstream 是既能从文件读取数据,又能向文件写入数据的类。3、 标准流(1...原创 2019-12-10 11:47:43 · 314 阅读 · 0 评论 -
输入和输出
1、C++的IO机制C++没有提供关于输入输出的语句,但是提供了全面的标准库来提供IO机制。这个标准库就是iostream库。许多与IO相关的操作都要包含这个库。2、4个IO对象cin:标准输入。cout:标准输出。cerr:标准错误clog:输出运行时的一般性信息。3、 cin的输入分隔符为空格4、操纵符:endlendl的作用是结束当前行,并将与设备关联的缓冲区数据刷新到...原创 2019-12-02 23:04:02 · 97 阅读 · 0 评论 -
多态的实现原理
1、首先,思考一个问题。“多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定 ---- 这叫“动态联编”。“动态联编” 底是怎么实现的呢?//运行一段运用多态机制的程序class Base {public: int i;virtual void Print() { cout << "Base:Print" ; }...原创 2019-12-08 15:59:42 · 124 阅读 · 0 评论 -
使用多态提高程序扩充性举例(1)——游戏
1、游戏简介假如一款打怪类的游戏,游戏中有多个不同的怪物:龙、天使、凤凰、士兵等。怪物能够互相攻击,攻击敌人和被攻击时都有相应的动作。动作是通过对象的成员函数实现的。假如现在游戏需要升级:要增加新的怪物–雷鸟。2、编程的基本思路为每个怪物类编写 Attack、FightBack和 Hurted成员函数。Attact函数表现攻击动作,攻击某个怪物,并调用被攻击怪物的Hurted函数,以减少...原创 2019-12-05 15:50:32 · 471 阅读 · 0 评论 -
虚析构函数
1、什么是虚析构函数?将一个类的虚函数定义成虚函数,这个析构函数就叫虚析构函数。注意:不允许以虚函数作为构造函数2、为什么提倡把带有虚函数的类的析构函数写为虚析构函数通过基类的指针删除派生类对象时,通常情况下只调用基类的析构函数。但是,删除一个派生类的对象时,应该先调用派生类的析构函数,然后调用基类的析构函数。因此,我们可以引入虚析构函数解决这个问题。3、基类、派生类虚析构函数的特点...原创 2019-12-08 16:12:34 · 2039 阅读 · 0 评论 -
多态基本概念
1、为什么要引入多态机制?多态机制可提高程序的可扩充性(即程序需要修改或增加功能的时候,需要改动和增加的代码较少)。支持类、对象、继承,但是不支持多态的语言应该称为基于对象的语言(例如:VB)。而支持多态的语言才能称为面向对象的语言。2、虚函数(1) 什么叫虚函数?在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。class base { virtual int get...原创 2019-12-05 15:29:04 · 603 阅读 · 0 评论 -
纯虚函数和抽象类
1、什么是纯虚函数、什么是抽象类?没有函数体的虚函数的纯虚函数。包含纯虚函数的类叫抽象类。//举栗子:class A {private: int a;public: virtual void Print( ) = 0 ;//纯虚函数 void fun() { cout << "fun"; }};2、抽象类的特点抽象类只能作为基类来派生新类使用,不能创建抽象类...原创 2019-12-08 16:20:28 · 355 阅读 · 0 评论 -
泛型程序设计基本概念
C++是一门很强大的语言,他有两种机制来提高代码的重用性,其中一种通过继承实现。另外一种就是泛型。使用模板的程序设计就是泛型程序设计。在C++中模板有两种体现形式,一种是类模板,一种是函数模板。...原创 2019-12-12 18:50:57 · 438 阅读 · 0 评论 -
继承派生基本概念
1、为什么引入继承机制?软件开发提倡“可重用性”高,而C++引入继承机制正是提高代码可重用性的方式之一。2、继承与派生的基本概念首先继承和派生讲的是一回事。继承:在定义一个新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。也称为B继承自A。3、注意点派生类是通过对基类进行修改和扩充得到的。在派生类...原创 2019-12-04 10:44:06 · 463 阅读 · 0 评论 -
public、private、protected继承的规则
class base { };//基类class derived : public base { };//派生类base b;derived d;对于上述代码,下面三条规则适用:规则一:派生类的对象可以赋值给基类对象b = d;规则二:派生类对象可以初始化基类引用base & br = d;规则三: 派生类对象的地址可以赋值给基类指针base * pb...原创 2019-12-05 11:16:36 · 160 阅读 · 0 评论 -
派生类对象的构造函数与析构函数
1、派生类调用基类构造函数的两种方式我们不能够直接在派生类的构造函数内部初始化派生类所包含的基类成员,因为派生类成员函数内部不能访问基类的私有成员。因此,我们应该使用初始化列表的方式初始化派生类所包含的基类成员。在执行一个派生类的构造函数(初始化)之前,总是先执行基类(初始化)的构造函数。因此,在创建派生类的对象时,需要先调用基类的构造函数:初始化派生类对象中从基类继承的成员。Bug::Bu...原创 2019-12-05 10:30:51 · 489 阅读 · 0 评论 -
类继承直接基类与间接基类规则
1、C++中继承可以是多层次的(1)类继承直接基类与间接基类规则如下:在声明派生类时,只需要列出它的直接基类派生类沿着类的层次自动向上继承它的间接基类(2) 派生类的成员包括:派生类自己定义的成员直接基类中的所有成员所有间接基类的全部成员2、举栗子class MoreDerived:public Derived {public: MoreDerived()...原创 2019-12-05 11:26:37 · 3600 阅读 · 0 评论 -
派生类覆盖(修改)基类成员
1、什么是覆盖?派生类可以定义一个和基类成员同名的成员,这叫覆盖。在派生类中访问这类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符号::。注意:一般来说,基类和派生类不定义同名成员变量。2、举栗子class base { int j;public: int i; void func();};class derived :pub...原创 2019-12-05 09:29:08 · 1660 阅读 · 0 评论 -
类的保护成员
1、基类的private成员:可以被下列函数访问基类的成员函数基类的友元函数2、基类的public成员:可以被下列函数访问基类的成员函数基类的友元函数派生类的成员函数派生类的友元函数其他的函数3、基类的protected成员:可以被下列函数访问基类的成员函数基类的友元函数派生类的成员函数可以访问当前对象的基类的保护成员...原创 2019-12-05 09:31:41 · 2813 阅读 · 0 评论 -
浅拷贝和深拷贝
1、什么叫浅拷贝?什么叫深拷贝?同类对象之间相互赋值,并且赋值运算符没有经过重载的话,2、需要考虑浅拷贝深拷贝问题的场景有哪些?3、如何实现深拷贝?需要考虑哪几个点?...原创 2019-11-25 23:01:17 · 103 阅读 · 0 评论 -
模拟标准库vetor类写一个简易的变长整数型数组
c++标准库中有一个边长数组类vector,为了巩固前面学习的关于运算符重载以及构造函数的知识,在此模拟标准库,自定义一个简易的int型的变长数组类CArray。这个类在效率上存在一定的缺陷,只做学习中。#include<iostream>#include<cstring>using namespace std;class CArray{private: ...原创 2019-11-27 22:52:52 · 131 阅读 · 0 评论 -
运算符重载为友元函数
1、为什么需要把需要把运算符重载为友元函数?运算符重载,如果重载为类的成员函数能解决问题的话最好。但是有些情况下,将运算符重载为成员函数并不能有效的解决问题,这个时候考虑将运算符重载为全局函数。但是将运算符重载为全局函数也有一些不足。遇到这种情况的一种策略就是把运算符重载为友元函数。Complex x,y;y=x+5;//情况一y=5+x;//情况二情况一这种情况将加号运算符重载为...原创 2019-11-26 20:51:43 · 2521 阅读 · 0 评论 -
运算符重载概念及实现原理
1、运算符重载简介(1)为什么引入运算符重载机制?C++ 中的预定义的运算符:“+、-、*、/、%、^、&、~、!、|、=、<<>>、!=、…” 只能作用在基本数据类型上面,但是有些时候希望类类型之间也可以使用这些运算符进行运算(比如说:两个复数的运算),并且这种需求是合理的。基于这种需求,C++语言引入了运算符重载这一概念。(2)C++运算符重载机制目的?...原创 2019-11-25 17:51:46 · 2394 阅读 · 1 评论 -
重载赋值运算符
1、为什么要重载赋值运算符?预定义的赋值运算符"="要求左右两边的操作数类型是匹配的或者至少是兼容的。有时希望赋值运算符两边的操作数即使类型不兼容也能成立。此时可以通过重载赋值运算符来完成这种需求。2、重载赋值运算符的特点C++规定,只能将赋值运算符重载为成员函数类型。3、举例class String {private: char * str;public: String (...原创 2019-11-25 19:46:06 · 1335 阅读 · 0 评论 -
C++ pair
1. pair 简介1.1 功能//类模板:template<class _T1, class _T2> struct pair{ typedef _T1 first_type; typedef _T2 second_type; _T1 first; _T2 second; pair(): first(), second() { } pair(cons...原创 2020-03-31 23:13:47 · 92 阅读 · 0 评论 -
容器概述
1、容器概述可以用于存放各种类型的数据(基本类型的变量,对象等)的数据结构,都是类模版,分为三种:(1)顺序容器vector, deque,list(2)关联容器set, multiset, map, multimap(3)容器适配器stack, queue, priority_queue对象被插入容器中时,被插入的是对象的一个复制品。许多算法,比如排序,查找,要求对容器中的元素进...原创 2019-12-16 17:43:21 · 899 阅读 · 0 评论 -
关联容器:map和multimap
关联容器原创 2019-12-17 17:06:24 · 61 阅读 · 0 评论 -
顺序容器:vector和deque 的程序举栗子
vector和deque原创 2019-12-16 20:06:10 · 124 阅读 · 0 评论 -
顺序容器:双向链表 list
双向链表list原创 2019-12-16 20:07:40 · 110 阅读 · 0 评论 -
string类 简介
1、string类简介string 类是模板类:typedef basic_string<char> string;使用string类要包含头文件 :<string>2、string类的初始化(1)正确的初始化:string s1("Hello");string month = "March";string s2(8,'x');(2)错误的初始化:...原创 2019-12-16 10:01:06 · 132 阅读 · 0 评论 -
string类的常用成员函数
1、与字符串对象输入输出相关的函数(1)从流中读取一个string对象cin.operator>>(string& str)//cin 中重载的>>的符号函数,有接收字符串的版本/*函数功能:从流中读取一个字符串到字符对象中。*///使用举例 string stringObject; cin >> stringObject;(2...原创 2019-12-16 11:22:13 · 3118 阅读 · 0 评论 -
迭代器概述
1、迭代器概述迭代器的特点:用于指向顺序容器和关联容器中的元素迭代器用法和指针类似有const 和非 const两种通过迭代器可以读取它指向的元素通过非const迭代器还能修改其指向的元素2、定义和使用迭代器(1)定义迭代器//定义非const迭代器 容器类名::iterator 变量名;//定义const迭代器 容器类名::const_iterator 变量名;(...原创 2019-12-16 19:42:57 · 369 阅读 · 0 评论 -
3、删除算法
删除算法原创 2019-12-17 17:12:12 · 180 阅读 · 0 评论 -
函数对象
函数对象原创 2019-12-16 20:08:43 · 172 阅读 · 0 评论 -
标准模板库STL中常用的算法
算法原创 2019-12-16 19:53:47 · 198 阅读 · 0 评论 -
7、数值算法
7)数值算法原创 2019-12-17 17:14:23 · 94 阅读 · 0 评论