
C++
OopsZero
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
size_t和size_type
为了使自己的程序有很好的移植性,C++程序员应该尽量使用size_t和size_type,而不是int,unsigned。在标准C/C++的语法中,只有int float char bool等基本的数据类型,至于size_t,或size_type都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型。size_t是为了方便系统之间的移植而定义的,它是一个无符号整型,在32位系统上定义为:unsigned int;在64位系统上定义为unsigned long。size_t一般用转载 2020-08-23 10:01:38 · 398 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(40)之命名空间和模块化编程1
模块化(modularization):把程序划分成多个组成部分,这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。命名空间(namespace):为解决C++中变量、函数的命名冲突而服务的。事实上就是一个含有许多标识符的空间,其中包括了许多标识符的定义。创建头文件绝大多数头文件是通用型的,不隶属于任何特定的程序,所以至少把它的用途和用法描...原创 2019-03-30 15:04:33 · 296 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(39)之避免内存泄露
问题提出:一般来说,分配了一个内存块但忘记了释放它,这是一种严重的错误。这样的内存块将等到程序执行结束时才会被释放掉。如果程序会运行很长时间并且在不停地申请新内存块,忘记释放那些已经不再有用的老内存块将迟早会把内存消耗殆尽,直接导致后边的new操作无法执行甚至是崩溃。这样的编程漏洞称之为内存泄露(memory leak)。new语句所返回的地址是访问这个内存块的唯一线索,同时也是delet...原创 2019-03-30 14:38:16 · 203 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(47)之内联函数
内联(inline)引入内联函数的目的是为了解决程序中函数调用的效率问题.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理.inline int add(int x, int y, int z){ return x+y+z;...原创 2019-04-03 20:43:24 · 263 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(36)之从函数或方法返回内存
动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。掌握这个技巧很重要,尤其是在你打算使用由别人编写的库文件时。如果不知道这个技巧,就只能让韩桑树返回一个简单的标量值,如整型、浮点型或字符型。换句话说,它既不能返回一个以上的值,也不能返回数组之类比较复杂的数据结构。这个技巧的基本思路:在函数里调用new语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的...原创 2019-03-26 14:39:40 · 239 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(30)之虚继承
前一节的student示例程序看起来似乎已经解决了问题,但它存在着一些隐患。首先,在TeachingStudent类的introduce()方法里,我们不得不明确告诉编译器应该使用哪一个属性。这对于classes属性来说是应该的,因为教一门课和上一门课有点本质的区别,而作为常识,助教生教的课程和他学的课程不可能一样。但是既然在TeachingStudent对象里可以继承两个不同的class...原创 2019-03-22 22:17:59 · 337 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(29)之多继承
什么时候需要用到多继承呢?----只要你遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。----举个例子:在学校里有老师和学生,他们都是人(Person),我们可以用“老师是人”和“学生是人”语法来描述这种情况。----从面向对象编程角度上来看,我们应该创建一个名为Person的基类和两个名为Teacher和Student的子类,后两者是从前者继承来的。问题...原创 2019-03-22 21:40:59 · 414 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(28)之重载《操作符
通过重载<<操作符来实现print打印分数的功能。例如: std::cout << "Hello FishC!";c标准库对左移操作符(<<)进行了重载,让它可以把值发送到一个流去。但是在这个例子中,iostream库对新的Rational类表示一无所知,所以不能直接用<<来输出我们的有理数(分数)。另外一个原因也比较重要:因为,重载的含...原创 2019-03-22 19:42:46 · 1313 阅读 · 1 评论 -
小甲鱼-C++快速入门笔记(35)之动态数组
用new给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来---因为我们为之申请内存的桑珊类型在程序里有明确的定义,有明确的单位长度。可是,总有些时候,必须要等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。程序示例:在程序运行时让用户输入一个值自行定义数组的长度。---把一个数组声明传递给new语句将使它返回一个该数组基类型的指...原创 2019-03-26 11:26:06 · 255 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(27)之运算符重载2
重点要掌握的:1、欧几里得算法2、运算符重载#include <iostream>#include <string>#include <cmath>using namespace std;class Rational{public: Rational(int num, int denom); //num=分子,denom=分母...原创 2019-03-22 16:45:19 · 317 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(26)之运算符重载1
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新的功能。而运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。运算符重载时通过定义函数实现的,运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:例如我们重载运算符+,如下:int operator+(int a,int b)...原创 2019-03-22 01:03:02 · 327 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(31/32)之错误处理和调试
程序出错可以分为两大类:1、编译时错误2、运行时错误让函数返回错误代码:如果计算的值超出了计算机所能表达的最大整数可以采用climits头文件.这个头文件从c的limits.h头文件应用过来的, 主要列出了各种数据类型在给定操作系统上的取值范围,并且把每种数据类型的最大可取值和最小可取值都分别定义为一个常量共我们比较。比如, SHORT_MAX代表短整数类型在给定系统上的最大可...原创 2019-03-23 16:57:58 · 463 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(33)之assert函数和捕获异常
1、assert函数这个函数是在c语言的assert.h库文件里定义的,所以包含到c++程序里我们用以下语句:#include <cassert>assert( )函数需要有一个参数,它将测试这个输入参数的真or假状态.---如果为真,Do nothing---如果为假, Do something#include <iostream>#incl...原创 2019-03-23 22:59:22 · 843 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(41)之命名空间和模块化编程2
使用头文件在创建了头文件之后,只要把它的文件名用双引号括起来写在如下所示的指令里就可以导入它:#include “fishc.h”注意:自定义的头文件用双引号括起来,系统定义的头文件用<>。如果没有给出路径名,编译器将到当前子目录以及当前开发环境中的其他逻辑子目录里去寻找头文件。为了消除这种猜测,在导入自己的头文件时可以使用相对路径。如果头文件与主程序文件在同一个子目录...原创 2019-03-30 19:47:47 · 281 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(46)之类模板
函数模板需要注意的地方:(1) 在创建模板时,还可以用template <typename T>来代替template <class T>,它们的含义是一样的.而且template <class T>中的class并不意味着T只能是一个类.此外,不要把函数模板分成原型和实现两个部分.(2)为了明确表明swap()是一个函数模板,还可以使用swap<...原创 2019-04-03 20:12:10 · 449 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(45)之函数模板
两种c++程序设计范型:(1)按照面向过程式范型把程序划分为不同的函数(2)按照面向对象式范型把代码和数据组织成各种各样的类并建立类之间的继承关系.(3)泛型编程:支持程序员创建函数和类的蓝图(即模板,template),而不是具体的函数和类当程序需要用到这些函数中的某一个时,编译器将根据模板即时生成一个能够对特定数据类型进行处理的代码版本.在泛型编程技术里,我们仍然要编写自己的函...原创 2019-04-02 16:32:10 · 300 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(44)之链接和作用域2
一个栗子:header.h头文件#ifndef HEADER_H#define HEADER_Hunsigned long returnFactorial(unsigned short num);static unsigned short headerNum = 5;#endifthat.cpp文件#include "header.h"unsigned shor...原创 2019-04-02 15:44:23 · 203 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(43)之链接和作用域
链接与作用域有关的另一个概念是链接,当你同时编译多个文件时:g++ -o test main.cpp rational.cpp每个源文件都被称为一个翻译单元(translation unit),在某个翻译单元里定义的东西在另一个翻译单元里使用正是链接发挥作用的地方.存储类(storage class)每个变量都有一个存储类,它决定着程序将把变量的值存储在计算机的什么地方,如何...原创 2019-04-02 14:37:17 · 260 阅读 · 0 评论 -
冒泡算法实现
冒泡算法的思想是依次两两比较待排序的数组元素;若为逆序(递增或递减)则进行交换,将待排序元素从左至右比较一遍称为一趟"冒泡"。每趟冒泡都将待排序列中的最大关键字交换到最后(或最前)的位置,直至所有元素有序为止。#include <iostream>using namespace std;void MaopaoSort(int *array, int count);voi...原创 2019-03-28 17:15:40 · 1114 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(38)之高级强制类型转换
1、静态对象强制类型转换#include <iostream>#include <string>using namespace std;class Company{public: Company(string theName, string product); virtual void printInfo();protected: string...原创 2019-03-28 15:14:18 · 349 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(37)之副本构造器
之前讲过,我们可以把一个对象赋值给一个类型与之相同的变量。编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员。这种赋值行为称之为逐位赋值(bitwise copy)。这种行为在绝大多数数场合都没有问题,但如果某些成员变量时指针的话,那么问题来了:对象成员进行逐位复制的结果是你将拥有两个一模一样的实例,而这两个副本里的同名指针会指向相同的地址。事实上,对于任何一个类,如...原创 2019-03-27 20:17:23 · 490 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(42)之命名空间和模块化编程3
命名空间最大的区域是全局作用域,最小的区域是一个代码块,例如:{ int a = 20;}//a在此处已经不存在问题:随着程序越来越复杂,全局作用域里的东西会越来越多,尤其是在使用外部函数库时。这可能会演变成一个问题:因为没有两样东西可以有同样的名字。解决方案之一是给每个变量、函数和类等取一个独一无二的名字,但这可能很困难或很麻烦(因为随着一个程序代码量的逐步增加,一个变...原创 2019-03-31 23:13:59 · 297 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(49)之迭代器
引言上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:name[x].因为对容器里的各个元素进行遍历是一种十分常见的任务,所以应该有一种标准的方式来做这事,c++标准库提供的各种迭代器(iteraor)就是这么来的.迭代器迭...原创 2019-04-04 14:45:47 · 311 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(48)之容器和算法
容器:能容纳两个或更多个值的数据结构通常称为容器(container),因此数组是c++唯一直接支持的容器,但数组并不适合用来解决所有的问题.而之前介绍过的基于模板的Stack类就是一种新容器.在C++标准库里有许多现成的容器.解决一个问题,找到最合适的容器只是编程工作的一部分.还需要一些适当的函数(算法)来处理这个容器里的数据才能实现最优效率.向量容器数组这种数据结构最大的先天不...原创 2019-04-04 14:18:06 · 307 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(34)之动态内存管理
在很多时候,需要存储的数据量到底有多大在事先往往是一个未知数,要想处理好这类情况,就需要在c++程序里使用动态内存。动态内存支持程序员创建和使用种种能够根据具体需要扩大和缩小的数据结构,它们只受限于计算机的硬件内存总量和系统特殊约束。1、静态内存变量(包括指针变量)、固定长度的数组,某给定类的对象。我们可以在程序代码里通过它们的名字或者地址来访问和使用它们。而使用静态内存的最大弊端是,...原创 2019-03-25 14:44:28 · 351 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(20)之覆盖方法和重载方法
关于从基类继承来的方法和属性的保护:----class Pig : public Animal {...}C++不仅允许你对在类里定义的方法和属性实施访问控制,还允许你控制子类可以访问基类里的哪些方法和属性。public: 是在告诉编译器:继承的方法和属性的访问级别不发生任何改变,即public仍可以被所有代码访问,protected只能由基类的子类访问,private则只能由基类本...原创 2019-03-18 15:24:36 · 393 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(25)之抽象方法
1、课前练习(虚函数的使用):#include <iostream>using namespace std;class animal{public: void sleep() { cout << "animal sleep" << endl; } virtual void breathe() //利用虚函数使得子类的方法能顺利覆...原创 2019-03-21 20:24:29 · 439 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(3)之从一个程序说起
上一节课后题代码#include <stdio.h>#include <stdlib.h>int main(){ int i; int sum = 0; char ch; printf("请输入一串整数和任意数目的空格: "); printf("\n"); while (scanf("%d", &i) == 1) { s...原创 2019-03-11 21:19:53 · 468 阅读 · 4 评论 -
小甲鱼-C++快速入门笔记(2)之从一个程序说起
问题:对一个整型数组求和要求:定义一个存储着n个元素的数组,要求用c语言完成这个任务。#include <stdio.h>/* 对一个整型数组求和 */int addArray(int array[], int n);int main(){ int data[] = {1,2,4,5,6,7,9,10}; int size = sizeo...原创 2019-03-11 19:53:52 · 421 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(1)之语言与思想介绍
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。OO思想: 分而治之,逐步求精在面对对象的思想中,任何事物都可以被看做一个对象,一个再复杂的模型结构都是由千千万万个对象组成的。特点:1、封装2、抽象3、继承4、多态:在基类中定义的属性和行为被子类继承后,可以具有不同的数据类型或者表现行为等特性...原创 2019-03-11 18:57:46 · 540 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(10)之指针和数组
指针和数组1、数组的名字其实也是一个指针(指向数组的基地址,就是第一个元素的地址)--- int *ptr1 = &myArray[0];--- int *ptr2 = myArray;2、访问其他元素: ptr1++;注意以上不是简单的对地址值进行+1处理,它是按照指向的数组的数据类型来递增的,也就是+sizeof(int)#include <iostr...原创 2019-03-15 20:55:41 · 344 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(21)之友元关系
定义:友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。声明方式:声明一个友元关系的语法很简单,只要在类声明里的某个地方加上一条friends class ** 就行了。注意:这条语句可以放在任何地方,放在public,protected,private段落里都可以。...原创 2019-03-19 14:57:10 · 388 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(9)之指针
温故而知新:---创建变量时,系统将分配一些内存块用来保存它们的值;---每个内存块拥有一个独一无二的地址;---变量的地址可以用&variablename语法来取得;---可以把地址赋值给一种称为指针的特殊变量;---指针的类型必须与由它保存其地址的变量的类型一致;字符存放在内存中的形式是ASCII码课后思考:1、一定要牢记的事实:指针所保存的是内存中的一...原创 2019-03-14 23:37:34 · 290 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(8)之指针
变量可以通过两种方式进行索引:1、通过变量名2、通过地址使用指针地址是计算机内存中的某个位置,而指针是专门用来存放地址的特殊类型变量。声明指针变量: type * pointerName;注意:在创建指针时,空格放在哪里都是可以的,下面语句均可:--- int *p1;--- int * p1;--- int* p1;允许void类型的指针变量: voi...原创 2019-03-14 23:19:40 · 382 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(7)之复杂的数据类型
三种数据类型:数组、指针、结构1、数组请分别尝试用c和c++实现将用户输入的字符串打印出来。#include <iostream>#include <string>using namespace std;int main(){ string str; cout << "请随便输入一个字符串: " <<endl; getl...原创 2019-03-14 01:18:00 · 298 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(6)之函数的重载
定义:用同样的名字再定义一个有着不同参数但有着同样用途的函数,可以是参数个数上的不同,也可以是参数数据类型上的不同#include <iostream>using namespace std;void convertTemperature(double tempIn, char typeIn);void convertTemperature(int tempIn, ch...原创 2019-03-14 00:35:27 · 357 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(5)之输出输入小结
题目1:这个程序将向用户提出一个“Y/N”问题,然后把用户输入的值赋值给answer变量。要求:---针对用户输入的“Y”或“y”和“N”或“n”进行过滤;---发掘程序可能存在的任何问题,想想为什么?#include <iostream>using namespace std;int main(){ char answer; cout << ...原创 2019-03-13 21:35:35 · 300 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(11)之对象的基础:结构
对象的基础:结构1、结构是一种由程序员定义的、由其他变量类型组合而成的数据类型。基本语法:struct name{ type varName1; type varName2; ...};当要处理一些具有多种属性的数据时,结构往往是很好的选择.例如://定义struct FishOil{ std::string name; ...原创 2019-03-16 09:53:04 · 345 阅读 · 1 评论 -
小甲鱼-C++快速入门笔记(12)之传值、传址和传引用
传值、传址和传引用1、传值方式#include <iostream>using namespace std;void changeAge(int age, int newage);int main(){ int age = 24; cout << "My age is " << age << endl; changeA...原创 2019-03-16 10:52:47 · 262 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(13)之联合、枚举和类型别名
联合、枚举和类型别名1、联合联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的某一个。union mima{ unsigned long birthday; unsigned short ssn; char* pet;};//创建该类型变量mima mima_1;// 对联合利的成员赋值mima_1.birt...原创 2019-03-16 11:22:20 · 277 阅读 · 0 评论