
C++学习
dzweather
https://jfchatai.cn/auth?type=register&invite=NjI4Ng
展开
-
(一)C++启航
1、命名空间:C++标准库中的实体都在命名空间std中定义,所以标准军中的所有实体名都用std来限定。 cout的全名就是 std::cout ,两个冒号称为:范围解析运算符。 故,若文件首没用using namespace std; 那么就必须 写成:std::cout 除此外,还可专门针对某个使用函数描写如 #include usin原创 2012-08-16 20:31:55 · 840 阅读 · 0 评论 -
(十) 程序文件、预处理指令
1、每一个CPP及它所包含的所有头文件称为一个转换单元。 编译器处理每个转换单元的过程与生成目标对象的过程是无关的。2、编译只负责把每个转换单位生成目标文件。目标文件由链接程序链接成exe,这个链接包括处理一些链接属性,比如extern. extern用来说明本文件中此变量,已经在另一个文件定义了。因此在本文件同一块作用域中,不再有相同的定义变量,如:原创 2012-09-10 21:26:02 · 932 阅读 · 0 评论 -
(十一)开创自己的数据类型:类的开始
1、类是用户定义的数据类型,定义时用class typedef 不创建新类型,仅为已有类型定义别名。 枚举 独特的类型,但它不是一个类。 类 全新的,原始的类型。可应用于类对象的操作,完全由用户定义。 union和struct创建的新类型,从技术上来看它们都是类。2、结构类型:st原创 2012-09-24 15:53:02 · 688 阅读 · 0 评论 -
c++名字查找原则
如果在声明函数的参数时使用了一个类,那么在查找匹配的函数名字时,编译器会在包含参数类型的名字空间中也进行查找。#include "stdafx.h"#include using namespace std;namespace lx1{ class Point3d { public: Point3d (double dx, double d转载 2012-10-16 21:09:01 · 806 阅读 · 0 评论 -
(十五)继承---父辈的遗产
1、多态性是面向对象的核心,而继承则是实现多态性的基础。2、由类A产生一个类B,类B是类A的特殊版本。类A称为基类,类B称为派生类,类A是父,类B是子。 类B自动包含基类A的所有数据成员和所有函数成员(只是有一些限制条件)。即派生类继承了基类的成员。 由类A派生出类B,类B再派生出类C,则A是B的直接基类,A是C的间接基类。3、继承与聚合原创 2012-10-14 15:41:49 · 969 阅读 · 0 评论 -
(十七)错误和异常处理
1、异常是一个任意类型的临时变量,用于警示错误。 异常可以是基本类型(int double),但它通常是专门为处理错误而定义的"类对象". 异常对象可以把错误发生的信息传送给处理错误的代码,而且涉及到的信息不只一项.2、throw 抛出异常 一般配合try来使用.3、try....catch....用于捕捉异常 try块原创 2012-11-01 16:23:14 · 1031 阅读 · 0 评论 -
(十六)多态----核心机密,小心应付+
1、多态性常用“虚函数”来描述。它们总是在调用函数时使用对象的指针或对象的引用。 而多态性仅用于共享一个基类的类层次结构,因此:“从一个类派生另一个类”是多态性的基本条件。2、基类指针指向派生类指针。 因为派生类包含一个基类的子对象,即派生类对象也是基类对象。因此,基类指针可以指向(存储)派生类对象的地址。 甚至可以使用任何直接或间接基类的指针存储原创 2012-10-24 21:05:39 · 603 阅读 · 0 评论 -
为cfree5 配置舒心的编译环境
先设置一下自己的工具栏:see screen:原创 2012-11-08 11:50:03 · 5349 阅读 · 1 评论 -
(十八)类模板
1、类模板就是模板的一种,同函数模板一样,不同的类型对应不同的函数,实质是重载的发生。 类模板也一样,也是类型的不一样(当然它也有非类型的情况),不同类型就生成不同的类。2、特化与实例化的区别 原由:由多个相同类型的对象,我们提炼出“类”的概念,相同“形式”的类,我们又提炼出“类模板”的概念。 因此:特化是某个类型不适合通用成员的代码,须要指明原创 2012-11-16 10:09:02 · 1031 阅读 · 0 评论 -
堆区分配方法
堆区用于手动进行分配内存,这是如何管理的呢? 对于堆区,系统设置一个空闲块队列,初始状态时队列中只有一个连续的空闲块。作业到达后,以某种策略分配空间。作业撤离时,将释放的空间再次加放空间队列中。分配策略有几种:首次满足法,从队列中找到最先满分配空间的内存进行分配。最佳满足法,从队列中进行搜索,找到刚好或稍大于需要的内存大小,进行分配。最大满足法,从队列中进转载 2012-12-13 22:13:00 · 1425 阅读 · 0 评论 -
(十四)运算符的重载
1、重载与重写的区别: 重写:函数名和参数的类型及个数完全一样的几个函数,当调用时会发生“就近”(当前作用域)覆盖掉远的函数的情况,就是重写,重点”覆盖“!!! 重载:函数名一样,但参数个数或类型不一样时,调用时就匹配其参数个数或类型等”选择“一个最适合的,就是重载。重点”选择“!!!2、运算符重载:一般对于类类型的对象定义运算,这种叫运算符重载。原创 2012-10-09 20:40:41 · 1462 阅读 · 0 评论 -
观察对象构造与重载内部细节
先明确两点:1、赋值运算符和类的拷贝构造函数,对于类来说是有默认的,如果没有显式的,必要时编译器会提供这默认的函数。2、构造函数(含拷贝构造函数)是没有返回值的逐个看一下细节:class A{ int b; public: A(int m):b(m){cout<<"one arg constructor"<<endl;} void show(){cout<<b<原创 2012-10-11 18:17:21 · 837 阅读 · 0 评论 -
(十三)类的操作
1、对象的创建:有七种A a(3),b=3,c=A(3),d(a),e=a,*f=new A(3),*h=new A(a),a={3};2、指针与引用 一:指针,对象使用指针:用->进行操作;作为函数的参数;作为类的数据或成员。 二:引用,传送大对象要比按值传送更快,避免了复制过程,拷贝构造函数就是利用这点。3、前向声明:当类A中使用了类B,类B原创 2012-10-05 20:28:49 · 891 阅读 · 0 评论 -
(五)不断前进:循环
1、while(条件) {..............} 注意括号最外可以不加;2、do{.....................}while(条件); 注意括号最外,就是条件最后必须加括号。 因此,最好两个都加分号吧,这样不易出错。3、for(初值;条件;增值){。。。} 注意,不一定非得用整形数,也可以原创 2012-08-29 10:01:17 · 667 阅读 · 0 评论 -
(二)基本数据类型和计算
1、强类型语言:变量经指定后,不经强制转换则永远是这种类型,因此,编译器会检查类型是否正确或兼容,以免后期发生不可预计的错误。2、字面量:就是字面显示的数据,即“具体的值”就是字面量。如“3.23”,“Hello World", 5.6,7000 这些就是字面量。3、浮点数:通俗地说,就是数字的位数是固定的,但小数点却可自由自在地在数字间浮动来浮动去。比如:假定数原创 2012-08-18 19:57:27 · 1337 阅读 · 0 评论 -
(六)人以群分物以类聚:数组及字串
1、定义数组中的整数:数组的个数(即长度) 数组在运行中的整数:索引,即偏移量(到数组第一个元素的偏移量) int a[4]; //分配连续4个int类型的内存单位,但未初始化(里面的值是垃圾值),这个数组占用内存大小4X6=24字节。2、初始化列表(初始化集合)的妙用。 如果列表中元素少于数组个数,则其余初始化为0,就即使列表中一个元原创 2012-08-30 15:18:07 · 1340 阅读 · 0 评论 -
(三)处理基本数据类型
1、混合类型表达式转换:总原则:不失真 因此,一般都是由窄类型向宽类型转换。2、随机数: 产生0到10: a=rand() % 11 产生1到10: a= 1+ rand() % 103、sizeof(类型或变量)取得内存所占大小,返回size_t(相当于unsigned int),t表示typ原创 2012-08-22 22:41:52 · 1514 阅读 · 0 评论 -
(七)数据的向导:指针
1、空指针:int *p=0; 空指针中,在C中指NULL,但C++中指的是0。因此,在C++中判断是否空指针,与0比较即可。2、char *p="abc"; 在常量区 char p[]="abc“;在栈区3、[]与()同级,比*高。 const int a=3; 最终的内容是常量 cons原创 2012-09-02 14:39:26 · 595 阅读 · 0 评论 -
(四)选择与决策
1、if (条件)语句;可以嵌套。同样if else中的条件一样必须打括号 if i==3 cout else总是使用最近的if配套,因此为了清晰,最好合理使用花括号 。2、测试字符判断: #include isupper() 是否为大写(A-Z) islower() ...........原创 2012-08-25 12:06:41 · 972 阅读 · 0 评论 -
(八)程序最小的细胞单元:函数
1、函数名与形参列表合称"函数签名“ 编译器根据函数签名来确定调用哪个函数。因此尽管函数名相同,但形参不同,但编译器总能准确定位调用了哪个函数。 因此,一个程序中有两个函数,其函数名、形参都相同,但返回值不同。编译器就不会区别这两个函数,总认为第二为重定义,就会出错。2、函数的返回值,其值在函数结束时会消失,但其副本会返回到函数调用处。原创 2012-09-05 19:21:42 · 884 阅读 · 0 评论 -
(九)函数的“化身”百态:重载、模板及函数指针
呼,,,终于到了最紧要的关头了。1、函数签名(函数声明):它包括了函数名和函数的参数类型。一个函数只对对应一个唯一的签名(不唯一,就会出错)。 因此,两个同名函数但参数类型不同,就是两个不同的函数签名,程序就是这样去识别、分辨调用的是哪个函数。 由此,我们产生了我们以为相同的情况:函数名相同,但参数类型或参数的个数不同的。尽管还是函数签名不同,但我们把这种情况称原创 2012-09-07 14:25:05 · 865 阅读 · 0 评论 -
(十二)类
1、类的介绍: 封装:把数值(数据)和函数打包到一个对象中,称封闭。数据和函数分别为成员,类中有数据成员和成员函数。 隐藏:OOP是根据对象来编程,不是根据组成对象的位来编程,因此隐藏数据从本质上有也有好处。 继承:基类、继承、派生。根据一个类型定义另一个类型。为类的前进锦上添花。 多态:总与指针和引用有关。一组继承性相关的类通过基类原创 2012-09-26 16:18:53 · 787 阅读 · 0 评论 -
C++ Primer Plus (第五版)中文版 勘误表
最的第六版出来了,听说和五版相同,只是多了一章C++11的内容,于是于,我还是学五版吧。同样五版有错误,引用这个勘误表:http://blog.youkuaiyun.com/woxing615701/article/details/3888576C++ Primer Plus (第五版)中文版 勘误表 (不断更新)这是我在读《c++ Primer Plus》中发现的明显的错误转载 2013-01-28 12:44:05 · 7993 阅读 · 1 评论