C++学习
文章平均质量分 51
雪沫沫
程序代码是个很神奇的东西,我不知道我会在这条路上走多久,但是和他打交道的每一秒我都是开心的,付出努力的。
展开
-
C++模拟实现复数类
#include <iostream>using namespace std;class Complex{public: Complex(double Real = 0.0f, double Image = 0.0f) :_Real(Real) ,_Image(Image) {} Complex(const Complex& c)原创 2017-02-27 21:40:02 · 244 阅读 · 0 评论 -
类的三种特殊设计【每日一题】
1.设计一个类不能被继承 。 解法一、将该类的构造函数设为私有函数 在C++中子类的构造函数会自动调用父类的构造函数,子类的析构函数也会自动调用父类的析构函数,要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数,那么当一个类试图从它那继承的时候,必然会由于调用构造函数、析构函数而导致编译错误。那么既然这个类的构造和析构函数都是私有的,我们就必须通过定义公有的静态函数来创建和释原创 2017-07-16 22:18:18 · 237 阅读 · 0 评论 -
数据结构——线索化二叉树
#include <iostream>using namespace std;enum PiontFlag{LINK,THREAD};template<class T>struct BinaryTreeNode{ BinaryTreeNode(const T& data) :_data(data) ,_pLeft(NULL) ,_pRig原创 2017-05-16 15:11:53 · 168 阅读 · 0 评论 -
数据结构——哈夫曼树实现
利用小堆实现哈夫曼树Heap.h#pragma once#include <vector>#include <assert.h>//仿函数template<class T>struct Less{ bool operator()(const T& left,const T& right) { return left < right; }};te原创 2017-05-16 15:18:39 · 382 阅读 · 0 评论 -
数据结构——堆的实现
//普通的模板参数template<class T>struct Less{ bool operator()(const T& left,const T& right) { return left < right; }};template<class T>struct Greater{ bool operator()(const T& le原创 2017-05-16 15:15:14 · 190 阅读 · 0 评论 -
数据结构——二叉树的基本操作
二叉树节点结构template<class T>struct BinaryTreeNode{ BinaryTreeNode(const T& data) :_data(data) ,_pLeft(NULL) ,_pRight(NULL) {} T _data; BinaryTreeNode<T>* _pLeft;原创 2017-05-16 15:10:05 · 278 阅读 · 0 评论 -
二叉平衡树代码实现
节点设置template<class K,class V>struct AVLTreeNode{ AVLTreeNode(const K& key,const V& value) :_pLeft(NULL) ,_pRight(NULL) ,_pParent(NULL) ,_key(key) ,_value(v原创 2017-05-24 20:13:26 · 533 阅读 · 0 评论 -
数据结构——二叉搜索平衡树
二叉搜索平衡树(AVL树) 1、AVL树引入 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要原创 2017-05-24 17:52:48 · 407 阅读 · 0 评论 -
C++之智能指针总结
C++提供了4种智能指针用于对分配的内存进行自动释放。 即auto_ptr、unique_ptr、share_ptr、weak_ptr。这4种智能指针都使用模板实现。 智能指针的行为类似于指针的类对象。它使用设计模式中的代理模式,即代理了原始“裸”指针的行为,为指针添加了更多更有用的特性。C++在引入异常机制后,智能指针有一种技巧升级为一种非常重要的技术,因为如果没有智能指针,程序员必须保证ne原创 2017-04-13 00:02:00 · 389 阅读 · 0 评论 -
不一样的斐波那契
斐波那契数列:1,1,2,3,5,8,13,21,34,55…… 写一个函数,输入n,求斐波那契数列的第n项。 f(n) = 0;n=0 f(n) = 1;n=1 f(n) = f(n-1)+f(n-2);n>1 解法1:递归long long Fibonacci(unsigned int n){ if(n <= 0) { return 0; }原创 2017-03-14 23:03:36 · 761 阅读 · 0 评论 -
C++之继承
继承 概念: 继承是面向对象程序设计使代码可以复用的最重要的手段,允许程序员在保持原有类特性的基础上进行扩展,增加概功能,这样产生新的类叫派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。 定义格式: class DeriveClassName:acess-lable BaseClassName 派生类(子类) :继承类型原创 2017-03-14 21:15:45 · 372 阅读 · 0 评论 -
C++之成员函数声明为虚函数的规则
虚函数 定义: 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,是C++多态的一种表现。 作用: 实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型,以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新原创 2017-03-20 00:15:26 · 4747 阅读 · 1 评论 -
C++多态之动态绑定
动态绑定: 定义: 动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,它是多态实现的具体形式。 原理: C++中,通过基类的引用或指针调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对的实原创 2017-03-19 23:49:52 · 597 阅读 · 0 评论 -
类和对象
类 类是面向对象程序设计的核心,实际上是新的数据类型,是实现抽象类型的工具。 类是对某一类对象的抽象,对象是某一类的实例。 类的一般格式:class<类名> {private:<私有数据和函数>public:<公有数据和函数>protected:<保护型数据和函数> };注意: (1) 类中的数据成员的类型可以是任意的,也可以是另一个类的成员函数,但不允许对所定义的数据成员进行初始化,也原创 2017-02-20 23:41:38 · 222 阅读 · 0 评论 -
C++中赋值运算符的重载
赋值运算符重载 注意问题: (1)返回值的类型声明:为该类型的引用; 函数结束前的返回值类型:实例的引用(便于实现连续赋值) (2)传入参数的类型声明:为常量引用。否则从形参到实参会调用一 次拷贝构造函数,造成无谓的消耗,声明为常量引用可以提高 代码运行效率 (3)内存泄露:在分配新内存之前一定用释放自己原有的空间,否则原创 2017-02-27 22:11:44 · 249 阅读 · 0 评论 -
二维数组中的查找【每日一题】
题目:一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x, 判断x是否在矩阵中。要求效率尽可能的高。 解决方法:从二维数组的右上角或者左下角开始找起, 如果右上角元素大于关键字,说明关键字不在右上角元素所在的列,因此剔除该列; 如果右上角元素小于关键字,说明关键字不在右上角元素所在的行,因此剔除该行; 如果右上角元素等于关键字,则查找成功; 如果右上角所在行与列都被剔除,则说明关键原创 2017-07-29 12:00:16 · 2550 阅读 · 0 评论