自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 【C++】【学习笔记】【025-027】运算符重载

重载1、重载就是重新赋予新的含义,函数从在是对一个已有的函数赋予新的含义,使之实现新功能;2、运算符也可以重载,运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算;3、运算符重载时通过定义函数实现的,运算符重载实质上是函数的重载;重载运算符的函数格式如下:函数类型 operator 运算符名称(形参列表){

2014-11-19 09:37:52 382

原创 【C++】【学习笔记】【024】抽象方法

抽象方法:1、抽象方法(abstract method)也可以称为纯虚函数,是面向对象编程技术的一个核心概念,在设计一个多层次的类继承关系时常会用到;2、把某个方法声明为一个抽象方法等于告诉编译器这个方法必不可少,但我现在(在这个基类里)还不能为它提供一个实现;3、抽象方法的语法很简单:在声明一个虚方法的基础上,在原型的末尾加上“=0”,告诉编译器不用浪费时间在这个类里寻找这个方法的实

2014-11-17 15:17:41 508

原创 【C++】【学习笔记】【023】虚方法

虚方法:1、声明虚方法的语法非常简单,只要在其原型前边加上virtual保留字即可;   virtual void play();2、普通函数是静态绑定,在编译的时候就确定了要调用基类的函数;虚函数是动态绑定,在运行的时候才确定是调用基类的函数还是子类的函数;3、另外,虚方法是继承的,一旦在基类里把某个方法声明为虚方法,在子类里就不可能再把它声明为一个非虚方法了;

2014-11-14 13:28:05 532

原创 【C++】【学习笔记】【021-022】静态属性和静态方法

静态属性和静态方法:1、C++允许我们把一个或多个成员声明为属于某个类,而不是仅仅属于该类的对象;这么做的好处是程序员可以在没有创建任何对象的情况下调用有关的方法;另外一个好处是能够让有关的数据在该类的所有对象间共享;2、创建一个静态属性和静态方法,只需要在它的声明前加上static保留字即可;3、对于静态属性,在类中声明的同时,需要同时在类的外面额外定义并初始化该属性对应的内存;

2014-11-12 22:24:38 607

原创 【C++】【学习笔记】【020】友元

1、有些时候,一个完全无关的类由于某些特殊的原因需要访问某个protected成员,甚至某个private成员,这就引入了友元的概念;2、友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性;3、声明一个友元关系的语法很简单,只要在类声明里的某个地方加上friend class **就行了,

2014-11-12 12:46:02 336

原创 【C++】【学习笔记】【019】覆盖方法和重载方法

覆盖方法:1、当我们需要在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现,在C++里,覆盖(overriding)就可以做到。简言之,覆盖方法就是共性里面寻找特性;2、覆盖的实现:在子类里重新声明这个方法,然后再改写一下它的实现代码就行了,就像是一个新增加的方法一样;3、子类里的方法,如果和基类里的方法名字一样、参数不一样,也是会把基类里的方法进行覆盖的;

2014-11-11 21:11:23 422

原创 【C++】【学习笔记】【018】访问控制

1、构造器的设计要越简明越好,我们应该只用它来初始化各种有关的属性;2、作为一个基本原则,在设计、定义和使用一个类的时候,应该让它的每个组成部分简单到不能再简单;3、访问控制:就是C++提供了一种用来保护类里的方法和属性的手段;4、保护的意思是对谁可以调用某个方法和访问某个属性加上一个限制。如果某个对象试图调用一个它无权访问的函数,编译器将报错。5、C++的访问级别如下:

2014-11-11 17:09:49 391

原创 【C++】【学习笔记】【017】继承机制中的构造器和析构器

1、基类必须在子类之前初始化。如:对于基类Animal和子类Pig,如果基类有个构造器Animal(),它将在创造Pig类型的对象时最先被调用,如果Pig类也有一个构造器Pig(),它将在第二个被调用。2、如果构造器带着输入参数,情况就比较复杂了;如下所示:// 动物基类class Animal{public: std::string name; Anima

2014-11-10 17:47:03 513 1

原创 【C++】【学习笔记】【016】this指针和类的继承

1、在对象的世界里,有一个特殊的指针叫做this,该指针指向对象本身;2、使用this指针的基本原则是:如果代码不存在二义性,就不必使用this指针;当然,在后续一些高级方法中也会使用this指针;

2014-11-10 16:21:55 884

原创 【C++】【学习笔记】【015】构造和析构

在创建对象时,系统都会自动调用一个特殊的方法,即构造器。构造器和通常方法的主要区别:1、构造器的名字必须和它所在的类的名字一样;2、系统在创建某个类的实例时会第一时间自动调用这个类的构造器;3、构造器永远付汇返回任何值。4、创建构造器,需要先把它的声明添加到类里。如下:class Car{ Car(void);};

2014-11-10 13:54:59 349

原创 【C++】【学习笔记】【014】对象

1、使用对象进行编程是C++的核心,也是我们常说的C++比C“高级”的重要根据之一。2、类(Class)就像是一幅蓝图,它决定一个对象将是什么样的(具备什么样的属性和功能)。3、OOP过程的第一步是创建一个类,而每个类跟变量一样都有一个名字。class MyFirstClass{};4、类名的第一个字符采用大写是一种习惯上的标准,但不是硬性规定。在类声明末尾,必须有一个分号

2014-11-10 12:42:44 430

原创 【C++】【学习笔记】【007-013】复杂的数据类型

数组:编程题:10个元素的整型数组,各元素求和以及平均值。编程题:将用户输入的字符串打印出来。#include int main(){    std::string str;    std::cout     //std::cin >> str;    std::getline(std::cin, str);    std::

2014-11-09 20:55:05 468

原创 【C++】【学习笔记】【006】函数的重载

重载的概念:1、C++里的函数重载(overloading)机制比我们此前见到的东西都高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。2、所谓函数重载的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数(人格分裂、多重身份...)3、注意:可以是参数个数上的不同,也可以是参数数据类型上的不同!4、重载不是一个真正的面向对象特征,它只是可以简化编程工作的一种方案,

2014-11-09 16:17:41 747

原创 【C++】【学习笔记】【005】输入输出小结

对输入数据进行合法性检查:cin对象有几个专门用来报告其工作情况的成员函数,它们将返回一个真/假值来表明cin的状态。cin的成员函数作用cin.eof()如果到达文件(或输入)末尾,则返回true。cin.fail()如果cin无法工作,则返回true。cin.bad()如

2014-11-08 20:38:16 577

原创 【C++】【学习笔记】【004】从另一个小程序说起

#include #include using namespace std;// 将一个文件复制到另一个文件int file_copy_main(){ ifstream in; in.open("test.txt"); if (!in) { cerr << "打开文件失败!" << endl; return 0;

2014-11-08 19:06:28 379

原创 【C++】【学习笔记】【002-003】从一个小程序说起

// 最简单的C++程序#include using namespace std;int main(){ cout << "Hello world!" << endl; return 0;}1、cout是一个输出流对象,它是“console out”(控制台输出)的缩写,是属于basic_ostream类的对象。ostream类在iostream头文件中定

2014-11-06 21:51:10 355

原创 【C++】【学习笔记】【001】CPP语言与OO思想介绍

什么是OO思想C++有个绝对的优势,就是针对不同的对象去做实例化,这就是所谓的OO思想。对于每个对象,抽象起来最终可以分为两个要素:属性和行为。OO思想的特点1、封装:把对象的属性和方法结合成一个独立的系统单位,并尽可能影藏对象的内部细节;2、抽象:其过程是对具体问题进行概括的过程,是对一类公共问题进行统一描述的过程;3、继承:子类对象拥有与其基类相同的全部属性和方

2014-11-06 19:39:02 507

原创 【练习题】【C】atoi函数的代码实现

// Filename: main.c#include #include #include #include "public.h"// 库函数atoi实现要求:// 1. 字符串开头如果有空格,则忽略;数字串中间有空格,则认为转换结束;// 2. 从正号“+”、负号“-”、数字“0-9”开始进行转换,直至遇到非数字“0-9”结束;// 3. 如果开头正号“+”(或者负号“-”)

2014-11-05 23:02:14 389

原创 【数据结构与算法】【查找】斐波那契查找的代码实现

斐波那契查找(Fibonacci Search):基于折半查找,对于mid的选择,使用斐波那契数组进行了调整。mid计算公式:mid = low + F[k - 1] - 1斐波那契数组计算公式:    F[K] = F[k - 1] + F[K - 2]    F[k] - 1 = (F[k - 1] - 1) + 1 + (F[k - 2] - 1)

2014-11-04 23:15:57 1289

原创 【数据结构与算法】【查找】插值查找的代码实现

插值查找(Interpolation Search):是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心在于插值的计算公式。插值计算公式:(key - a[low]) / (a[high] - a[low])mid计算公式:mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]);

2014-11-04 20:04:44 762

原创 【数据结构与算法】【查找】折半查找(二分查找)的代码实现

折半查找(Binary Search):也称为二分查找。它的前提是:1、线性表中的记录必须是关键字有序(通常是从小到大有序);2、线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断反复,直到查找成

2014-11-04 19:38:09 10181

原创 【数据结构与算法】【查找】顺序查找(线性查找)的代码实现

顺序查找:也称为线性查找,是最基本的查找技术。查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。代码实现(基本算法和优化算法):// Filename: sequential_search.c#i

2014-11-04 18:50:56 4143

原创 【数据结构与算法】【查找】基本概念

查找表(Search Table):是由同一类型的数据元素(或记录)构成的集合。查找表分为静态查找表和动态查找表。关键字(Key):是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。若关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key);若关键字对应多个记录,则称此关键字为次关键字(Secondary Key)。关键码:主关键字对应的数据项称为

2014-11-04 17:42:55 746

原创 【数据结构与算法】【排序】总结

如下排序算法当中,前三种是简单算法,后四种是改进算法。各算法的指标对比如下:

2014-11-03 16:11:40 354

原创 【数据结构与算法】【排序】快速排序的代码实现

快速排序是一种交换排序,它是排序算法的王者。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。快速排序优化方法:1、优化选取枢轴;2、优化不必要的交换;3、优化小数

2014-11-03 15:16:34 1569

原创 【数据结构与算法】【排序】归并排序的代码实现

归并是指将两个或两个以上的有序表组合成一个新的有序表。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:假设初始序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2](向上取整)个长度为2或1的有序子序列;再两两归并,...,如此重复,直至得到一个长度为n的有序序列为止。这种排序方法称为2路归并排序。

2014-11-03 10:21:10 792

原创 【数据结构与算法】【排序】堆排序的代码实现

堆排序是一种选择排序。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:将待排序的序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根结点。将它移到序列尾部,而后将剩余的n-1个序列重新构造成一个大顶堆。如此反复执行,便能得到一个有序序列了。代码实现:// Filename: heap_sort.c#include

2014-11-02 11:45:03 483

原创 【数据结构与算法】【排序】希尔排序的代码实现

希尔排序是一种插入排序。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:将待排序元素进行跳跃分割,对分割后的子序列分别进行简单插入排序;而后将跳跃分割的增量进行缩小,最后增量为1时完成排序。代码实现:// Filename: shell_sort.c#include #include #include #inc

2014-11-01 18:20:22 826

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除