
C++
文章平均质量分 57
地是非曲直的
天道酬勤!
展开
-
C++ Primer 第八章 标准IO库
什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。 为什么要引入缓冲区 比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据转载 2014-05-03 11:39:46 · 750 阅读 · 0 评论 -
Stack的三种含义
转载自:阮一峰学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。含义一:数据结构stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。在这种数据结构中,数据像积木那样转载 2014-12-16 16:46:47 · 842 阅读 · 0 评论 -
编译原理
源码要运行,必须先转成二进制的机器码。这是编译器的任务。比如,下面这段源码(假定文件名叫做test.c)。#include stdio.h>int main(void){ fputs("Hello, world!\n", stdout); return 0;}要先用编译器处理一下,才能运行。$ gcc test.c$ ./a.outHe原创 2014-12-16 16:14:33 · 584 阅读 · 0 评论 -
友元函数和友元类声明举例
注: 友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。所以,友元声明只能出现在类定义中。因为友元不是授权类的成员,所以它不受其所在类的声明区域public private 和protected 的影响。即友元函数的声明可以出现在类的任何地方class A{原创 2014-12-08 15:57:29 · 2558 阅读 · 0 评论 -
在类模板的声明和定义中把.h与.cpp分离
1.声明部分// Tpl.h#pragma oncetemplateclass CTpl {public: CTpl(); virtual ~CTpl(); void Test(T t);};2.实现部分// Tpl.cpp#include "Tpl.h"templateCTpl::CT转载 2014-12-26 17:04:25 · 731 阅读 · 0 评论 -
运算符重载之(),+
圆括号运算符也可以重载,重载之后对象就可以使用圆括号运算符了。使用圆括号运算符是不是很象函数?其实,圆括号运算符就叫函数调用运算符。下面是我刚刚写的一个例子,仅供参考。周末希望大家好好复习,咱们的时间很宝贵![code]#include using namespace std;class Time{ int hour; int minute;转载 2014-11-13 21:37:23 · 483 阅读 · 0 评论 -
C++模板(类模板、函数模板)
1、在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为原创 2014-12-30 14:23:16 · 623 阅读 · 0 评论 -
成员函数重载运算符和友元函数重载运算符的比较
1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。 对单木运算符来说,成员函数重载运算符的函数参数表中没有参数,而用友元函数重载运算符函数参数表中含有一个函数。这个问题要搞清楚,有一个this指针的问题。。。2.双目运算符一般可以用友元函数重载和成员函数重载,但有一种情况只可以用友元函数重载。 即:双目运算符左边的变转载 2014-11-13 10:26:58 · 6648 阅读 · 0 评论 -
拷贝构造函数和赋值运算符重载
重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。 以下讨论中将用到的例子: class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuffer=new char原创 2014-04-26 21:19:46 · 614 阅读 · 0 评论 -
关于C++输入输出笔记
关于涮新缓冲区:什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去原创 2015-01-02 22:18:26 · 784 阅读 · 0 评论 -
vector的clear()和swap()比较
假设有若干对象存于一个 vector 中:class Widget;vectorWidget> vw;后来由于某些原因,从该容器中删除了若干对象(参考erase-remove idiom )。对于 vector 和 string 来讲, erase() 和 clear() 并不会改变容器的capacity,也就不会改变他们的内存占用。swap() 本意是用来交换两个容器原创 2015-01-03 20:21:17 · 3949 阅读 · 0 评论 -
数组名为a, a,&a,&a[0]
a为数组名: int a[5];sizeof(a)是把a作为一个数组类型来测试大小,结果是数组占用的字节数。sizeof(&a)是把&a作为一个地址类型来测试大小,结果是4(64位系统里可能是8)。数组名本身在计算中会自动转化成第一个元素的地址,但sizeof测试的时候不做计算,不转化。a 的类型是 int[5] 数组&a 的类型是 int(*)[5]原创 2015-05-05 20:35:35 · 815 阅读 · 0 评论 -
关于构造函数
1、每个类必须有一个构造函数,否则没法创建对象; 2、若programer没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负责创建对象,不做任何初始化的工作; 3、只要programer定义了一个构造函数(不管是无参还是有参构造),C++就不再提供默认的默认构造函数。即如果为类定义了一个带参的构造函数,还想要无参构造函数,就必须自己定义;原创 2014-04-26 14:08:39 · 1176 阅读 · 0 评论 -
C++中静态数据变量和静态函数(面向过程&&面向对象)
数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态 成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员 存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的原创 2014-11-30 16:50:25 · 854 阅读 · 1 评论 -
C++中虚函数,结合例子解析,然后总结
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。 例:基类与派生类中有同名函数。在下面的程序中Student是基类,Graduate是派生类,它们都有display这个同名的函数。#include #include using namespace std;//声明基类Studen转载 2014-11-27 21:17:39 · 660 阅读 · 0 评论 -
nth_element 用法简介
简单的说nth_element算法仅排序第nth个元素(从0开始的索引)如iarray [first,last) 元素区间排序后 iarray[nth] 就是第nth大的元素(从0开始)要注意的是[first,nth) [nth,last)内 的大小循序还不一定只能确定iarray[nth]是第nth大的元素。当然 [first,nth) 肯定是不大于 [转载 2014-10-21 21:37:54 · 3708 阅读 · 0 评论 -
堆和栈的区别(转过无数次的文章)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2014-05-11 13:19:10 · 440 阅读 · 0 评论 -
关于extern
用例子给你示范 // 1.cpp int x = 10; // 2.cpp 注意没有包含1.cpp #include using namespace std; extern int x;int main () { cout << x << endl; } //则输出10 两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义翻译 2014-04-23 09:44:19 · 514 阅读 · 0 评论 -
C语言中----局部变量,外部变量,静态变量,寄存器变量
c语言中变量分为四类,分别是1.auto 自动变量2.static 静态存贮分配变量(又分为内部静态和外部静态)3.extern 全程变量(用于外部变量说明)4.register 寄存器变量(分配在硬件寄存器中)四大类,所有变量必须先说明(定义),后使用。下面分别介绍1.自动变量(局部变量)局部变量:在一个函数原创 2014-04-23 10:17:33 · 1104 阅读 · 0 评论 -
C++ 运算符重载
1. 运算符重载介绍之前的函数重载,允许多个同名不同参数类型的函数;运算符重载允许程序员如何使用运算符(如+、-、==、=和!)来处理不同类型的数据类型;对于基本数据类型,运算符是可以使用的:对于自定义数据类型:如果为对自定义MyString的运算符+定义,会出现编译错误。当一个运算符重载时,对于C++将会根据数据的类型,选择合适的重载运算符;C++中除转载 2014-04-27 10:12:02 · 620 阅读 · 0 评论 -
关于c++中的const ,包括void fool() const;这个函数中的const的作用
const 是C++中常用的类型修饰符,但我在工作中发现,许多人使用它仅仅是想当然尔,这样,有时也会用对,但在某些微妙的场合,可就没那么幸运了,究其实质原由,大多因为没有搞清本源。故在本篇中我将对const进行辨析。溯其本源,究其实质,希望能对大家理解const有所帮助,根据思维的承接关系,分为如下几个部分进行阐述。 C++中为什么会引入const C++的提出者原创 2014-04-26 10:56:09 · 860 阅读 · 0 评论 -
关于----面向过程------面向对象----中 static成员
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!这句话可能比较拗口,其实可以这么理解:每个static数据成员可以看成是类的一个对象,而不与该类定义的对象有任何关系!下面我们就来具体原创 2014-04-27 15:20:36 · 555 阅读 · 0 评论 -
C++中explicit关键字的作用
explicit用来防止由构造函数定义的隐式转换。 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如: class things{ public: things(const std::string&name =""): m_name(name),转载 2014-04-22 22:12:32 · 463 阅读 · 0 评论 -
C++ 声明与定义
下面列出一些应该或是不应该写入头文件的定义://test.h#ifndef TEST_H#define TEST_Hint a; //a有外部链接,不能在头文件中定义。extern int b=10;//同上。const int c=2;//c具有内部链接,可以定在头文件中但应该避免。static int d=3;//同上。static void func(){} //同原创 2014-10-30 20:16:17 · 467 阅读 · 0 评论 -
C++ 编译和链接
最近,有同事向我多次问及C++关于编译链接方面的问题,包括如下:1:什么样的函数以及变量可以定义在头文件中2:extern "C"的作用3:防止重复包含的宏的作用4:函数之间是怎么链接起来的我认为,这些问题不难,书上基本上都有,但要是没有真正思考过,就凭死记硬背,也就是只能“嘴上说说”而已,遇到问题还真棘手,所以我觉得有必要说一下。C/C转载 2014-10-30 20:36:08 · 604 阅读 · 0 评论 -
关于内敛函数
普通内联函数当我们定义了一个函数,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数语句的下一行继续执行。假如对该函数执行了上百次调用,那么就要来回跳转上百次,这会严重影响到程序的执行效率。C++中,为解决这一问题,可以使用关键字inline声明函数。如:inline int func(转载 2014-10-30 19:11:44 · 772 阅读 · 0 评论 -
C++中虚函数和纯虚函数的作用与区别-详解
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};原创 2014-11-27 22:03:33 · 732 阅读 · 0 评论 -
C++中类字节对齐
暂无原创 2015-09-08 16:05:56 · 531 阅读 · 0 评论