小甲鱼C++
文章平均质量分 58
cft56200_ln
格拉德韦尔在《异数》:并非天资超人一等,而是付出了持续不断的努力。只要经过1万小时的锤炼,任何人都能从平凡变成超凡”。要成为某个领域的专家,需要10000小时:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。
展开
-
小甲鱼-C++快速入门笔记(48)之迭代器
引言上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:name[x].因为对容器里的各个元素进行遍历是一种十分常见的任务,所以应该有一种标准的方式来做这事,c++标准库提供的各种迭代器(iteraor)就是这么来的.迭代器迭代器是一种功能非常有限却非常实用的函数,提供一些基本操作符:*, ++, ==, !=, =.通过使用迭代器,当转载 2021-02-18 15:40:26 · 137 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(47)之容器和算法
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/89004016容器:能容纳两个或更多个值的数据结构通常称为容器(container),因此数组是c++唯一直接支持的容器,但数组并不适合用来解决所有的问题.而之前介绍过的基于模板的Stack类就是一种新容器.在C++标准库里有许多现成的容器.解决一个问题,找到最合.转载 2021-02-18 15:34:54 · 133 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(46)之内联函数
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/89004016内联(inline)引入内联函数的目的是为了解决程序中函数调用的效率问题.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但能否形成内联函数,需要看编译器转载 2021-02-18 15:18:29 · 109 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(45)之类模板
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/89003336函数模板需要注意的地方:(1) 在创建模板时,还可以用template <typename T>来代替template <class T>,它们的含义是一样的.而且template <class T>中的class并不意转载 2021-02-18 15:13:37 · 84 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(44)之函数模板
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/88973857两种c++程序设计范型:(1)按照面向过程式范型把程序划分为不同的函数(2)按照面向对象式范型把代码和数据组织成各种各样的类并建立类之间的继承关系.(3)泛型编程:支持程序员创建函数和类的蓝图(即模板,template),而不是具体的函数和类当转载 2021-02-10 08:40:18 · 150 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(41)之命名空间和模块化编程3
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/88596720命名空间最大的区域是全局作用域,最小的区域是一个代码块,例如:{ int a = 20;}//a在此处已经不存在问题:随着程序越来越复杂,全局作用域里的东西会越来越多,尤其是在使用外部函数库时。这可能会演变成一个问题:因为没有两样东西转载 2021-02-03 16:02:30 · 139 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(40)之命名空间和模块化编程2
使用头文件在创建了头文件之后,只要把它的文件名用双引号括起来写在如下所示的指令里就可以导入它:#include “fishc.h”注意:自定义的头文件用双引号括起来,系统定义的头文件用<>。如果没有给出路径名,编译器将到当前子目录以及当前开发环境中的其他逻辑子目录里去寻找头文件。为了消除这种猜测,在导入自己的头文件时可以使用相对路径。如果头文件与主程序文件在同一个子目录里,则可以这么写:#include “./fishc.h”// fishc.h// Create b转载 2021-02-03 15:57:20 · 153 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(39)之命名空间和模块化编程1
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/88596720模块化(modularization):把程序划分成多个组成部分,这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。命名空间(namespace):为解决C++中变量、函数的命名冲突而服务的。事实上就是一个含有.转载 2021-02-03 15:52:14 · 89 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记(38)之避免内存泄露
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/88596720问题提出:一般来说,分配了一个内存块但忘记了释放它,这是一种严重的错误。这样的内存块将等到程序执行结束时才会被释放掉。如果程序会运行很长时间并且在不停地申请新内存块,忘记释放那些已经不再有用的老内存块将迟早会把内存消耗殆尽,直接导致后边的new操作无.转载 2021-02-03 15:47:55 · 113 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 37 之高级强制类型转换
一、静态对象强制类型转换大家还记得我们前阵子制造出一个苹果公司么?没错,这节课我们还继续对这家公司入手进行讲解!为了演示方便,小甲鱼小小的做了一些修改,尽管这样的修改有些问题,但是,作为今日内容的讲解还是甚好滴#include <iostream>#include <string> using namespace std; class Company{public: Company(string theName, string product); vi原创 2021-01-14 11:13:56 · 141 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 36 之副本构造器
一、概念:---之前讲过,我们可以把一个对象赋值给一个类型与之相同的变量。---编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员。这种赋值行为称之为逐位赋值(bitwise copy)。---这种行为在绝大多数数场合都没有问题,但如果某些成员变量时指针的话,那么问题来了:对象成员进行逐位复制的结果是你将拥有两个一模一样的实例,而这两个副本里的同名指针会指向相同的地址。1.1 出现问题----于是乎,当删除其中一个对象时,它包含的指针也将被删除,但万一此时另一个原创 2021-01-13 14:19:40 · 262 阅读 · 1 评论 -
小甲鱼-C++快速入门笔记 35 之从函数或方法返回内存
动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。掌握这个技巧很重要,尤其是在你打算使用由别人编写的库文件时。如果不知道这个技巧,就只能让韩桑树返回一个简单的标量值,如整型、浮点型或字符型。换句话说,它既不能返回一个以上的值,也不能返回数组之类比较复杂的数据结构。这个技巧的基本思路:在函数里调用new语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的主代码,主代码将使用那块内存并在完成有关操作后立刻释放。#include <iostream>原创 2021-01-13 11:47:00 · 84 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 34 之动态数组
一、定义虽然,前边我们讲过的用new给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来---因为我们为之申请内存的数据类型在程序里有明确的定义,有明确的长度。可是,总有些时候,必须要等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。从某种意义上讲,这样的内存管理才是真正的动态。这一讲中,我们将带大家编写一个程序为一个整数型数组分配内存,实现动态数组。二、例子实现一个程序,能够在程序运行时让用户输入一个值自行定义数组的长度。2原创 2021-01-12 18:51:53 · 92 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 4 之从另一个小程序接着说
文件I/O编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一个文件例如:fileCopy sourceFile destFilec语言实现#include <stdio.h>#include <stdlib.h> int main(int argc, char* argv[]){ FILE *in, *out; int ch; if (argc !=3) { fprintf(stderr, "输入形式:copyFile 源文件名 目转载 2021-01-12 15:46:14 · 148 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 25 运算符重载1
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新的功能。而运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。运算符重载时通过定义函数实现的,运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:例如我们重载运算符+,如下:int operator+(int a,int b){ return (a-b);}举个例子:实现复数加法(3,4i)+(5,-10i)=(8,..转载 2021-01-12 15:15:21 · 135 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 28 之多继承
什么时候需要用到多继承呢?----只要你遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。----举个例子:在学校里有老师和学生,他们都是人(Person),我们可以用“老师是人”和“学生是人”语法来描述这种情况。----从面向对象编程角度上来看,我们应该创建一个名为Person的基类和两个名为Teacher和Student的子类,后两者是从前者继承来的。问题来了:有一部分学生还教课挣钱(助教),该怎么办?这样就存在了既是老师又是学生的复杂关系,也就是同时存在着两个“是转载 2021-01-12 15:09:12 · 86 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 27 之重载《操作符
通过重载<<操作符来实现print打印分数的功能。例如: std::cout << "Hello FishC!";c标准库对左移操作符(<<)进行了重载,让它可以把值发送到一个流去。但是在这个例子中,iostream库对新的Rational类表示一无所知,所以不能直接用<<来输出我们的有理数(分数)。另外一个原因也比较重要:因为,重载的含义本身就是可以用相同的名字去实现不同的功能:输入参数方面有所差异就不会有问题。当然,我们无法在现有的ostrea转载 2021-01-11 18:35:40 · 127 阅读 · 0 评论 -
小甲鱼-C++快速入门笔记 26 之运算符重载2
重点要掌握的:1、欧几里得算法2、运算符重载#include <iostream>#include <string>#include <cmath> using namespace std; class Rational{public: Rational(int num, int denom); //num=分子,denom=分母 Rational operator+(Rational rhs); //rhs = right han转载 2021-01-11 18:27:08 · 121 阅读 · 0 评论 -
小甲鱼-C++ 24 抽象方法
https://blog.csdn.net/qq_30708445/article/details/887203051、课前练习(虚函数的使用):#include <iostream> using namespace std; class animal{public: void sleep() { cout << "animal sleep" << endl; } virtual void breathe() //利用虚函数使...转载 2021-01-06 18:45:44 · 240 阅读 · 0 评论 -
小甲鱼-C++ 23 虚方法
先来介绍两个c++保留字:new和delete在c或者C++中完全可以在没有创建变量的情况下为有关数据分配内存。也就是直接创建一个指针并让它指向新分配的内存块: int *pointer = new int; *pointer = 110; cout << *pointer; delete pointer; new和malloc没什么区别,new只是malloc的进化版本,进行了封装注意:最后一步非常必要和关键,因为程序不会自动释放内存,.转载 2021-01-06 18:30:50 · 219 阅读 · 0 评论 -
小甲鱼-C++ 22 静态方法
静态成员函数 静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。 在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);重点:(1)对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员转载 2021-01-06 18:17:58 · 106 阅读 · 0 评论 -
小甲鱼-C++ 21 静态属性和静态方法
创建一个静态属性和静态方法: 只需要在它的声明前加上static保留字即可静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里,我们主要讲述类的静态成员来实现数据的共享。静态数据成员 在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。 使用静态数据成员可以节省内存,因为它是所有对象所原创 2021-01-06 18:03:08 · 145 阅读 · 0 评论 -
小甲鱼-C++ 20 友元关系
定义:友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。声明方式:声明一个友元关系的语法很简单,只要在类声明里的某个地方加上一条friends class ** 就行了。注意:这条语句可以放在任何地方,放在public,protected,private段落里都可以。练习:题目1:#include <iostream>//在这里最好写上声明,因为A..原创 2021-01-06 17:38:03 · 127 阅读 · 0 评论 -
小甲鱼-C++ 19 覆盖方法和重载方法
关于从基类继承来的方法和属性的保护:----class Pig : public Animal {...}C++不仅允许你对在类里定义的方法和属性实施访问控制,还允许你控制子类可以访问基类里的哪些方法和属性。public: 是在告诉编译器:继承的方法和属性的访问级别不发生任何改变,即public仍可以被所有代码访问,protected只能由基类的子类访问,private则只能由基类本身访问。protected: 使得这个子类外部的代码无法通过子类去访问基类的publicprivate..原创 2021-01-06 16:24:06 · 175 阅读 · 0 评论 -
小甲鱼-C++ 18访问控制
在此前的例子中,我们无论是Animal,pig和Turtle类的所有成员都是用public:语句声明。注意:(1)一定要记住使用这些访问级别,即使只有你一个人再开发某个项目,全部记住各个类的调用方法也是一件困难的事情(2)给每个方法和属性加上protected或private访问级别,就由编译器替你记住那些禁令并在你违反的时候发出警报(3)使用访问级别只有好处没有坏处(4)使用private的好处是,今后可以只修改某个类的内部实现,而不必重新修改整个程序,因为其他代码访问不到priv转载 2021-01-06 15:53:57 · 94 阅读 · 0 评论 -
小甲鱼-C++ 17 继承机制中的构造器和析构器
1、调用顺序比如基类有个构造器,如Animal(),它将在创造Pig类型的对象时最先被调用,如果Pig类也有一个构造器,它将排在第二个被调用。因为基类必须在子类之前初始化。如果构造器带有参数呢??class Animal{public: Animal(std::string theName); std::string name;}class Pig:public Animal{public: Pig(std::string theName);}如何定义方法呢?Anim原创 2021-01-06 15:07:54 · 107 阅读 · 0 评论 -
小甲鱼-C++ 16 this指针、类的继承
1、通过一个典型的例子来认识它(this指针)class Human{ char fishc; Human(char fishc);} Human::Human(char fishc){ fishc = fishc;}Human()构造器有一个名为fishc的参数,虽然它与Human类里面的属性同名,但却是不相干的两样东西,所以并没有错.可是,问题是怎样让构造器知道哪个是参数,哪个是属性呢?这时候就需要用到this指针 : this-> fishc原创 2020-12-31 17:59:05 · 101 阅读 · 0 评论 -
小甲鱼-C++ 15 定义构造器和析构器
面向对象的编程技术开发程序的步骤:(1)定义一个有属性和方法的类(模板)(2)为该类创建一个变量(实现)1、构造器构造器和通常的方法的主要区别:(1)构造器的名字必须和它所在的类的名字一样;(2)系统在创建某个类的实例时会第一时间自动调用这个类的构造器;(3)构造器永远不会返回任何值class Car{ Car(void); //声明构造器} //定义构造器Car::Car(void) //不用写void Car::Car(void){原创 2020-12-31 17:29:00 · 130 阅读 · 0 评论 -
小甲鱼-C++ 14之对象
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.comhttps://blog.csdn.net/qq_30708445/article/details/885967201、创建简单的类OOP过程的第一步是创建一个类,而每个类跟变量一样都有一个名字,声明如下:class MyFirstClass{ };注意: 类名的第一个字母一般采用大写,类声明末尾必须有一个分号,类由变量和函数组成class .原创 2020-12-31 16:50:08 · 109 阅读 · 0 评论 -
小甲鱼-C++ 13 联合、枚举和类型别名
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.com1、联合联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的某一个。union mima{ unsigned long birthday; unsigned short ssn; char* pet;}; //创建该类型变量mima mima_1; // 对联合利的成员赋值mima_1.birt原创 2020-12-31 16:47:45 · 127 阅读 · 0 评论 -
小甲鱼-C++ 12 传值、传址和传引用
传值、传址和传引用① 传值方式#include <iostream> using namespace std; void changeAge(int age, int newage); int main(){ int age = 24; cout << "My age is " << age << endl; changeAge(age, age+1); cout << "Now my age is " <原创 2020-12-31 15:13:57 · 106 阅读 · 0 评论 -
小甲鱼-C++ 11 对象的基础:结构
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除www.fishc.com①对象的基础:结构1、结构是一种由程序员定义的、由其他变量类型组合而成的数据类型。基本语法:struct name{ type varName1; type varName2; ...};当要处理一些具有多种属性的数据时,结构往往是很好的选择.例如://定义struct FishOil{ std::string原创 2020-12-31 14:43:41 · 91 阅读 · 0 评论 -
小甲鱼-C++ 10 指针和数组
①指针和数组1、数组的名字其实也是一个指针(指向数组的基地址,就是第一个元素的地址)--- int *ptr1 = &myArray[0];--- int *ptr2 = myArray;2、访问其他元素: ptr1++;注意以上不是简单的对地址值进行+1处理,它是按照指向的数组的数据类型来递增的,也就是+sizeof(int)#include <iostream> using namespace std; int main(){ const un.原创 2020-12-31 09:41:25 · 137 阅读 · 0 评论 -
小甲鱼-C++ 9 之指针
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com温故而知新:---创建变量时,系统将分配一些内存块用来保存它们的值;---每个内存块拥有一个独一无二的地址;---变量的地址可以用&variablename语法来取得;---可以把地址赋值给一种称为指针的特殊变量;---指针的类型必须与由它保存其地址的变量的类型一致;字符存放在内存中的形式是ASCII码课后思考:1、一定要牢记的事.原创 2020-12-29 18:18:24 · 107 阅读 · 0 评论 -
小甲鱼-C++ 8 指针
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com变量可以通过两种方式进行索引:1、通过变量名2、通过地址使用指针地址是计算机内存中的某个位置,而指针是专门用来存放地址的特殊类型变量。声明指针变量: type * pointerName;注意:在创建指针时,空格放在哪里都是可以的,下面语句均可:--- int *p1;--- int * p1;--- int* p1;允许void类原创 2020-12-29 18:17:17 · 95 阅读 · 0 评论 -
小甲鱼-C++ 7 复杂的数据类型
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com三种数据类型:数组、指针、结构1、数组请分别尝试用c和c++实现将用户输入的字符串打印出来。#include <iostream>#include <string> using namespace std;int main(){ string str; cout << "请随便输入一个字符串: " <<原创 2020-12-29 18:10:18 · 91 阅读 · 0 评论 -
小甲鱼-C++ 6 函数的重载
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com① 函数重载概念C++里的函数重载(overloading)机制比我们此前见到的东西很高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。所谓函数重载的实质就是用同样的名字再定义一个有这不同参数但有着同样用途的函数。(人格分裂,多重身份......)#include <iostream> using namespace std;...原创 2020-12-29 18:01:52 · 120 阅读 · 0 评论 -
小甲鱼-C++ 快速入门笔记(5)之输出输入小结
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com题目1:这个程序将向用户提出一个“Y/N”问题,然后把用户输入的值赋值给answer变量。要求:---针对用户输入的“Y”或“y”和“N”或“n”进行过滤;---发掘程序可能存在的任何问题,想想为什么?#include <iostream> using namespace std;int main(){ char answer; co原创 2020-12-29 17:48:50 · 133 阅读 · 0 评论 -
小甲鱼-C++ 3 从一个程序说起
上一节课后题代码#include <stdio.h> /* 对一个整型数组求和 */ int addArray(int array[], int n); int main(){ int data[] = {1,2,4,5,6,7,9,10}; int size = sizeof(data) / sizeof(int); //int size = sizeof(data) / sizeof(data[0]); printf("结果是: %d原创 2020-12-29 17:40:33 · 133 阅读 · 0 评论 -
小甲鱼-C++ 2 从一个程序说起
写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除。www.fishc.com问题:对一个整型数组求和要求:定义一个存储着n个元素的数组,要求用c语言完成这个任务。#include <stdio.h> /* 对一个整型数组求和 */ int addArray(int array[], int n); int main(){ int data[] = {1,2,4,5,6,7,9,10}; .原创 2020-12-29 17:35:36 · 173 阅读 · 0 评论