
笔记
sxdahh
这个作者很懒,什么都没留下…
展开
-
覆盖和重载
覆盖方法当我们需要在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现,在C++里,覆盖(overriding)就可以做到。C++可以让我们很容易实现这种既有共同特征又需要在不同的类里有不同的实现的方法。修改例题:为我们的Animal添加eat()方法,并在Pig中覆盖。class Animal{public:void sleep();};class Pig:pu...原创 2020-03-14 17:50:04 · 198 阅读 · 0 评论 -
继承机制中的构造器和析构器
基类有个带有参数的构造器class Animal{public:Animal(std::string theName);std::string name;}class Pig:public Animal{public:Pig(std::string theName);}//在构造器中定义方法Animal::Animal(std::string theName){name...原创 2020-03-14 16:23:05 · 201 阅读 · 0 评论 -
类的继承
继承是面对对象编程技术的一个核心概念,它使得传统的软件开发模式发生了革命性的变化。继承机制可以创建一个类的堆叠层次结构,每个子类都将继承在它的基类里定义的属性和方法。通过继承机制,程序员可以对现有的代码进行进一步的扩展,并应用在新的程序中。基类和子类基类:可以派生出其他的类,也可以成为父类或超类。 Animal类子类:从基类中派生出来的类。Turtle类和Pig类Animal...原创 2020-03-14 16:03:01 · 247 阅读 · 0 评论 -
this指针
this指针例class Human{char fishc;Human(char fishc);}Human::Human(char fishc){fishc = fishc;}Human()构造器有一个名为fishc的参数,虽然它与Human类里面的属性同名,但却是不相干的两样东西,所以并没有错.怎样让构造器知道哪个是参数,哪个是属性呢?这时候就需要用到this指针 : ...原创 2020-03-14 15:23:34 · 145 阅读 · 0 评论 -
构造器和析构器
构造器,它是类里的一种特殊的方法。构造器和通常方法的主要区别:构造器的名字必须和它所在的类的名字一样系统在创建某个类的实例时会第一时间自动调用这个类的构造器构造器永远不会返回任何值创建构造器,需要先把它的声明添加到类里:class Car{Car( void );} 注意大小写与类名保持一致。在结束声明之后开始定义构造器本身:Car::Car(void) // 不用写 ...原创 2020-03-11 19:49:21 · 462 阅读 · 0 评论 -
对象
我们从一个类开始,首先类是一个模型。当我们为这个类创建实例的时候,也就是对象本身。这跟我们之前讲解的定义和使用结构的过程很相似,但是这更有扩展性和前瞻性。对于初学者而言,我们先给大家一个区别:对象的内部可以有变量和函数,而结构通常只由各种变量构成。创建简单的类因此,我们首先需要知道的一件事情是如何编写一个简单对象的模型 – 类类(Class)就像是一副蓝图,它决定一个对象将是什么样的(具备...原创 2020-03-11 15:45:16 · 150 阅读 · 0 评论 -
联合,枚举和类型别名
联合联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的一个。union mima{ unsigned long birthday;unsigned short ssn;char* pet;} 定义了这个联合类型之后,就可以像下面这样创建一个该类型的变量了: mima mima_1; 再接下来,我们可以像对结构成员进行赋值那样对联合...原创 2020-03-11 15:22:31 · 242 阅读 · 0 评论 -
传值,传址和传引用
c++一条基本原则:在默认情况下,参数只能以值传递的方式给函数,被传递到函数的只是变量的值,永远不会是变量本身。绕开值传递问题的第一种方法是向函数传递变量的地址取代它的值。changeA(&name,name+1)...原创 2020-03-11 10:59:36 · 417 阅读 · 0 评论 -
复杂的数据类型(结构)
对象的基础-结构结构( Structure)是一种由程序员定义的、由其他变量类型组合而成的数据类型。定义一个结构的基本语法是struct name{type varname1;type varname2;};结构的应用当需要处理一些貝有多种属牲的数据时,结构往往是很好的进择。例如当我们在编写一个档案管理程序时,涉及到的基本特征有:姓名、身份证、性别。。。struct Fish...原创 2020-03-11 10:45:28 · 877 阅读 · 0 评论 -
复杂的数据类型(数组,指针)
复杂=简单+简单介绍三种数据类型:数组,指针,数据结构。数组数组是许多程序设计语言的重要组成部分,尤其在c程序中经常用到它们。数组的优点在于,一个数组可以把多个不同类型的值存储在同一个变量名下。数组仍需要被声明为某一种特定的类型:int,float,chartype name[x];注意:我们不会把不同数据类型的数据混杂保存在同一个数组中,(不同物种不可杂交)。指针c语言和c++...原创 2020-03-10 15:59:05 · 537 阅读 · 0 评论 -
函数的重载
C++里的函数重载( overloading)机制比我们此前见到的东西都高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。所谓函数重载的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数。(人格分裂、多重身份 注意:可以是参数个数上的不同,也可以是参数数据类型上的不同!对函数进行重载,事实上可以简化编程工作和提高代码可读性。事实上重载不是一个真正的面向对象特征,它只是...原创 2020-03-10 15:00:30 · 173 阅读 · 0 评论 -
c++的文件I/O
C++的文件操作在ifstream in;inopen(“test. txt”)和ofstream out;outopen(test. txt");它们都是用一个open函数来完成打开文件的功能。当然,这不是唯一的方法,我们还可以这样实现。ifstream in("test. txt );和ofstream out("test. txt);以上代码在创建一个 ifstream和 o...原创 2020-03-10 13:31:42 · 170 阅读 · 0 评论 -
c语言和c++在终端I/O处理的异同
问题:对一个整型数组求和要求:定义一个存储着n个元素的数组要求用C语言完成这个任务用c语言来写#include <stdio.h>int addarray( int array[], int n ) ;int main(){int data[]={0,1,2,3,4,5,6,7,8,9};int size = sizeof(data)/ sizeof(data[ 0])...原创 2020-03-09 14:00:10 · 223 阅读 · 0 评论 -
C++语言与OO思想介绍
C++的特点C语言有一个优点,即它的速度可以很快。写出来的程序可以很精练、简单、小巧,不用为了解决某个问题环绕太平洋一大圈。但如果将C和C++相比较,C++就经常会为了解决某个问题绕一个大圈,所以代码量相对较大,并且里边有一些不是必须的代码。但C+有个绝对的优势,就是针对不同的对象去做实例化,这就是所谓的OO思想。什么是OO思想OO思想,即面向对象(Object Oriented)...原创 2020-03-05 18:33:56 · 644 阅读 · 0 评论 -
排序
排序的基本概念与分类文绉绉的概念假设含有n个记录的序列为{r1,r2,…rn},其相应的关键字分别为{k1,k2,…kn},需确定1,2,…n的一种排列p1,p2,…n,使其相应的关键字满足kp1<=kp2<=…<=kpn非递减(或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,…rpn},这样的操作就称为排序。在排序问题中,通常将数据元素称为记录。...原创 2020-03-04 15:34:22 · 142 阅读 · 0 评论 -
散列表(哈希表)查找
散列表(哈希表)查找我们要在a[]中查找key关键字的记录: 顺序表查找:挨个儿比较有序表查找:二分法查找散列表查找:?记录的存储位置=f原创 2020-03-03 21:46:52 · 662 阅读 · 0 评论 -
二叉排序树
二叉排序树如果这样简单无序存储,删除固然简单,若要查找则困难。故而产生了二叉排序树这样的存储方式。二叉排序树( Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:1 若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;2 若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;3 即它的左、右子树也分别为二叉排序...原创 2020-03-03 18:03:23 · 182 阅读 · 0 评论 -
查找
静态查找和动态查找静态查找:数据集合稳定,不需要添加,删除元素的查找操作。动态查找:数据集合在查找的过程中需要同肘添加或删除元素的查找操作。查找结构对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用...原创 2020-03-03 14:28:31 · 207 阅读 · 0 评论 -
拓扑排序
拓扑排序一个无环的有向图称为无环图( Directed Acyclic Graph),简称DAG图。所有的工程或者某种流程都可以分为若干个小的工程或者阶段,我们称这些小的工程或阶段为“活动”。在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关糸,这样的有向图为顶点表示活动的网,我们称之为AOV网( Active On Vertex Network)。AOV网中的弧...原创 2020-03-03 13:05:00 · 150 阅读 · 0 评论 -
sizeof和strlen
sizeof和strlen**sizeof(…)**是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。**strlen(…)*是函数,要在运行时才能计算。参数必须是字符型指针(char)...原创 2020-02-18 14:48:47 · 190 阅读 · 0 评论 -
数组和指针区别
数组和指针数组定义char a[6];请求预留6个字符的位置,并用名称a表示。也就是说,有一个称为“a”的位置,可以放入6个字符。指针声明char *p;请求一个位置放置一个指针,用名称“p”表示。这个指针几乎可以指向任何位置:任何字符或任何连续的字符,或者哪里也不指。*声明 char a[] =“hello”;char p =“world”; 将会初始化下图所示的数据结果:**数组和...原创 2020-02-11 15:09:20 · 238 阅读 · 0 评论 -
空指针
空指针空指针:它“保证与任何对象或函数的指针值都不相等”。也就是说,空指针不会指向任何地方,它不是任何对象或函数的地址。每种指针类型都有一个空指针,而不同类型的空指针的内部表示可能不尽相同。取地址操作符&永远也不会返回空指针。同样对ma11oc的成功调用也不会返回空指针。(如果失败,ma11oc的确返回空指针,这是空指针的典型用法:表示“未分配”或者“尚未指向任何地方”的“特殊”指针值。...原创 2020-02-10 21:35:05 · 3946 阅读 · 0 评论 -
i++陷阱
表达式a[i]=i++;是非法的,禁止一边修改一边使用i值的表达式,对i的一处访问(a[i])与最终存储在i中的值(i++计算得到)毫无关系。i=i++;的行为是未定义,即根据编译器和解释器不同,这行代码输出可能是不一样的。...原创 2020-02-22 15:06:36 · 124 阅读 · 0 评论 -
定义类型
比较用户定义类型 typedef和# definetypedef char String_t;#define String_d char *String_t s1, s2;String_d s3, 34;s1、s2和s3都被定义成了char,但s4却被定义成了char。原创 2020-02-10 12:00:45 · 723 阅读 · 0 评论 -
字符指针变量和字符数组
字符指针变量和字符数组(1)字符数组由若干个元素组成,每个元素中放一个字符;而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值 char str[14]; str=“I love China!”;而对字符指针变量,可以采用下面方法赋值: char *a;a=“I love China...原创 2020-02-09 12:14:51 · 324 阅读 · 0 评论 -
指针和指针变量
指针和指针变量指针:一个变量的地址称为该变量的指针。指针变量:专门用来存放另一变量的地址(指针)的变量。用来指向另一变量。指针变量的值=指针变量中存放的值=指针(地址)int i;float *p;//p是指向实型变量的指针变量,指针变量名是p,*p为指针变量p所指向的存储单元p=&i;//&i为变量i的地址*p=3;//将3赋给指针变量p所指向的变量i,与i=3;作用...原创 2020-02-09 11:23:42 · 2044 阅读 · 0 评论 -
指针函数、函数指针和函数指针数组
数组指针(也称行指针)定义 int (*p)[n];首先p是一个指针,指向一个整型的长度为n的一维数组。n也是p的步长,即执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //定义一个数组指针,指向一个含4个元素的一维数组p=a;//将该二维数组的首地址赋给p,也就是a[0]或p++;//该语句执行过后,...原创 2020-02-07 16:51:12 · 139 阅读 · 0 评论 -
数组指针和指针数组
一:数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n]????)优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 元素表示为 (p)[i];如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维...原创 2020-02-07 16:44:06 · 127 阅读 · 0 评论 -
定义和声明
函数定义和声明定义是对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整独立的函数单位。声明是把函数的名字、类型以及形参的类型、个数和顺序通知编译系统。一般要求对调用函数进行函数声明。例如main(){int max(int x,int y);//函数声明,可以不写形参名,即int max(int ,int );int a,b;c=max(a,b)...原创 2020-02-07 13:59:12 · 153 阅读 · 0 评论 -
形参与实参
形参与实参main(){int a,b;c=max(a,b);//形式参数,形参也是局部变量(局部和全局同名,听局部的,全局变量作用范围太大,反而大家不听他的)}max(int x,int y){}//实际参数形参和实参的类型应相同。实参变量对形参变量的数据传递是值传递,即单向传递,只由实参传递给形参。在定义函数中指定的形参,未出现函数调用时,不占内存中的存储单元。只有在发生函数...原创 2020-02-07 13:55:39 · 535 阅读 · 1 评论 -
存储类别
存储类别static Int a(静态内部整型变量或静态外部整型变量)auto char c;(自动变量,在函数内定义)register int d;(寄存器变量,在函数内定义)extern bt(声明b是一个已被定义的外部变量)从作用域角度分有局部变量和全局变量局部变量:1自动变量 即动态局部变量(离开函数,值就消失)2静态局部变量(离开函数,值仍保留)3寄存器变量(离开函数...原创 2020-02-07 13:45:56 · 112 阅读 · 0 评论 -
数组部分初始化
数组部分初始化1.一维数组,例如int a[10]={0,1,2,3,4};定义a数组有10个元素,但只给前面5个元素赋初值,后5个元素值为0。2.二维数组,int a[3][4]={{1},{5},{9}};定义3行4列的数组a,只对各行第1列的元素赋初值,其余元素值为0。int a[3][4]={{1,2},{},{9}};定义3行4列的数组a,可以对某一行不赋值。3.字符数组,cha...原创 2020-02-06 21:33:38 · 3481 阅读 · 1 评论