自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++基础 虚函数

在基类中可能会存在virtual函数,那么当派生类继承了基类的话,一般都是希望派生类重新定义继承来的virtual函数。如果派生类没有定义某个虚函数,则使用基类定义的版本。C++中的函数调用默认不使用动态绑定。要触发动态绑定需要满足两个条件:(1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数时,不进行动态绑定。(2)必须通过基类类型的引用或指针进行函数调用。class fru...

2018-03-27 19:31:22 157

原创 《Effective C++》条款07:为多态基类声明virtual析构函数

   class Base_A{public: Base_A():element(0) {} ~Base_A() { cout << "调用A的析构函数" << endl; } void print(int a) { cout << a << endl; } void print(float a) { cout << a &..

2018-03-26 11:41:51 242

原创 《Effective C++》 条款33:避免遮掩继承而来的名称

    派生类继承基类后会拥有基类的成员变量和成员函数,如果派生类中有和基类相同名称的成员函数和成员变量,那么派生类中相同名称的成员函数会把继承而来的成员函数“遮盖”掉。下面给出实例来进行分析。class Base_A{public: Base_A():element(0) {} virtual ~Base_A() {} void print(int a) { cout <<...

2018-03-25 10:37:03 227

原创 C++基础——虚继承及其内存分布

 1、虚继承在C++继承中会遇到一种特殊的情况——“钻石继承”。“钻石继承”指的是当一个基类A被两个派生类B和C同时继承,此时另一个派生类D又同时继承B和C,如果此时用图表示出来就像一个菱形一样,如下图。    派生类D通过继承之后拥有基类A和派生类B,C的成员,所以一旦派生类D想要调用基类A的成员(无论是数据成员还是成员函数)时,此时派生类是通过派生类B来访问基类A的成员呢?还是通过派生类C来访...

2018-03-23 16:12:57 1586

原创 C++基础——继承

1、公有、私有和受保护继承    如果一个类的成员被定义成该类的私有成员,那么只有基类的成员和友元可以访问类中的私有成员。同时派生类也无法访问基类的私有成员,派生类的实例对象也无法访问这些私有成员。如果派生类为公有继承,基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。如果是受保护成员,基类的public和p...

2018-03-19 08:53:03 165

原创 C++基础——友元函数

    在C++中为了有更好的封装性,所以我们一般将数据声明为私有成员(private)。当我们需要操作数据成员的时候就需要利用类内的函数来使用私有的数据成员。而我们在实现函数定义时是在类外进行函数定义的。而只有类内的函数才可以访问类中的数据成员,函数通常声明为共有成员。但是还有另一种方法:将函数声明为友元函数,那么该函数也可以访问类内的私有成员。    class product{publi...

2018-03-17 16:11:40 318

原创 MySQL之增、删、查、改

DDL语句(数据库和数据库对象的创建、修改和删除基本都是通过DDL语句来实现的)1.1 create 数据库create database +数据库名字[库选项];e.g:create database SchoolDB;库选项:用来约束数据库 (1)字符集设定:charset/character set 具体字符集(数据存储的编码格式):常用字符集:GBK和UTF8 (2)校对集设定:col...

2018-03-15 21:23:50 600

原创 《Effective STL》 05 区间成员函数优先于与之对应的单元素成员函数

讨论:给定v1和v2两个矢量(vector),使v1的内容和v2的后半部分相同的最简单操作如何实现?    方案1:v1.assign(v2.begin()+v2.size()/2,v2.end());    方案2:v1.clear();   copy(v2.begin()+v2.size()/2,v1.end(),back_inserter(v1));    方案3:使用循环将所需要插入的元素...

2018-03-14 16:38:55 190

原创 《Effective STL》 03 确保容器中的对象拷贝正确而高效

    当你通过insert或者push_back之类的操作将对象加入到容器中,事实上存进容器中的是你所指定的对象的拷贝。当通过front等操作后,取出来的对象也是所制定的对象的拷贝而已。存放进容器的对象越多耗费的时间就越多。同时还存在“剥离”的情况存在,例如:当创建一个存放基类对象的容器,却向容器中存放派生类的对象,那么在派生类对象被拷贝进容器中,那么特有的派生类的信息就会丢失掉。之所以会发生“...

2018-03-14 00:28:54 242

原创 《Effective STL》 01:慎重选择容器类型

    vector是默认应使用的序列类型;当需要频繁地在序列中做插入和删除操作时,应该使用list;当大多数插入和删除操作发生在序列的头部和尾部时,deque是应考虑的数据结构。在STL的容器里面可以大致分为两类:连续内存容器和基于结点的容器。连续内存容器是指容器内存放的元素是在一块或多块内存中,每块内存存有多个元素。而基于结点的容器是像链表一样的容器,每一个小的内存中只存放一个元素。在进行删除...

2018-03-13 23:30:31 191

原创 算法——冒泡排序算法

    1、冒泡排序的思想    冒泡排序的思想很简单,就是相邻的两个元素进行比较,如果下标较小的元素大于下标较大的元素,交换两个元素的位置。直到最后没有反序位置。所以自然而然会想到可以使用for循环来遍历整个数组的元素来进行比较(相邻的两个元素比较)。那么代码就可以这么写:for(int i=0;i<ListSize-1;i++){ if(List[i]>Lis...

2018-03-13 00:20:04 134

原创 进程与线程之生产者和消费者问题

    在学习进程和线程的过程中,毫无疑问肯定会学到多线程、进程间通信等相关问题。而这也是学习进程和多线程方面的一个重点。这篇文章主要介绍的是利用互斥量、锁以及使用Pthread库来实现生产者和消费者问题。1、临界区    临界区指的是共享内存进行访问的程序片段。在实现线程间同步就必须只有一个线程访问临界区。上图中进程A在T1时刻进入临界区,当运行到T2时刻的时候进程B试图进入临界区。因为此时进程...

2018-03-09 16:40:39 1958

原创 Leetcode 20. Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all valid but ...

2018-03-08 20:50:31 112

原创 C++类中的static成员函数和static数据成员

1、static数据成员的使用1.1 static数据成员的定义static数据成员可以声明为任意类型,可以是常量、引用、数组、类类型。static数据成员在类内声明,但是必须在类定义体的外部定义,也就是必须在类外进行定义。在使用类内的static成员时,和其他的成员变量的使用方法相同。class ChineseClass{public: void Note(); ChineseClass...

2018-03-08 17:55:44 2132

原创 《现代操作系统》 进程与线程(2)

第二章  进程与线程2.2  线程    多线程的优点主要是以下三个:1)多线程具有并行实体共享用一个地址空间和所有可用数据的能力。2)线程比进程更轻量级,所以它们比进程更容易创建,也更容易撤销。3)当涉及大量的计算和I/O处理时,拥有多个线程允许这些活动可以同时进行。在网络服务器中多线程发挥着重要的作用。Web服务器中会有一个分派程序的多线程从网络中不停地读入工作请求,然后把工作请求派给工作线程...

2018-03-06 23:15:17 206

原创 《现代操作系统》之 进程与线程

第二章  进程与线程2.1进程    操作系统中最核心的概念是进程,它是对正在运行程序的一个抽象,包括操作系统。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。下图中有四个进程,但是只有一个物理程序计数器。在执行其中某个程序时,例如执行A进程,此时进程A的逻辑程序计数器就会被加载到物理程序计数器中。并且在实际的执行当中,只有一个程序在执行。虽然现在多核的CUP盛行,但是即...

2018-03-05 23:43:56 273

原创 《CEffective C++》之条款01

    经过40多年的发展C++已经是个多重范型编程语言,一个同时支持过程式、面向对象形式、函数形式、泛型形式、元编程形式的语言。C++在不断的发展,所以在学习的过程中需要用新的思想和角度来看待C++。而“最简单的方法是将C++视为一个由相关语言组成的联邦而非单一的语言”,当时第一眼看到这句话的时候无法理解为什么要把C++给拆开。当然这种“语言联邦”的形式表面上看像是分割开的,但是实际上其中是有联...

2018-03-04 23:52:29 155

空空如也

空空如也

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

TA关注的人

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