C语言 笔记

第一章 概述

1. C语言的特点

①语言简洁、紧凑,使用方便、灵活。共有32个关键字(也称保留字),9种控制语句。

②运算符丰富,共有34种运算符。

③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。

④具有结构化的控制语句(如if…else、while、do…while、switch、for)

⑤语法限制不太严格,程序设计自由度大。

⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。

⑦生成目标代码质量高,程序执行效率高。

⑧可移植性好。

2. C语言的用途

C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。现在很多大型应用软件也用C编写。

3.   二进制数的表示

① (十进制转换二进制)将十进制除以2 后的余数 写出来 再自上而下地依次将余数加以汇集 如:10 10÷2=5 余0 5÷2=4 余1 4÷2=2 余0 2÷2=1 余1 10的二进制表示:1010

②(二进制转换十进制) 从最后一位开始 每位乘2的相对位数的几次方 结果相加 如:1010=0×2的0次方+ 1×2的1次方+0×2的2次方+1×2的3次方

③(二进制转换八进制) 从右向左 每三位进行一次十进制的转换

④(二进制转换十六进制) 从右向左 每四位进行一次十进制的转换

⑤ 原码:最高位作为符号位(0表示正,1表示负),其他数字位代表数值本身的绝对值的数字表示方式。

例如 数字6在计算机中原码表示:0000 0110 数字-6的原码表示:1000 0110

⑥ 反码:正数的反码、补码就是原码,不改变;负数则保留符号位1,然后将这个数字的原码按照每位取反

例如 数字6在计算机中的反码和原码一样:0000 0110 数字-6的反码表示:1111 1001

补码:正数不变,负数的补码就是对反码加一 例如:1111 1001 的补码 1111 1011

第二章 数据类型、运算符与表达式

1. C的数据类型

C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

2. 常量与变量

常量其值不可改变,变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。

符号常量:用一个标识符代表一个常量,定义符号常量又称为“宏定义”,一般写在程序的函数之外。如:#define PI 3.14159 以后凡遇到PI即用3.14159代替。它的值在其作用域内不能改变,也不能再被赋值,其作用域在文件结束或遇#undef 处结束。

常量名常为大写,变量名常为小写。

3. 整型数据

整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。

整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型(unsigned int)。不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。

4. 实型数据

实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、1230.0等。指数形式如123e3代表123×10的三次方。

实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E38,7位有效数字。double型占8字节(64位)内存空间,其数值范围为1.7E-308~1.7E308,15~16位有效数字。

5. 字符型数据

字符常量用单引号括起来,如‘a‘,‘b‘等。还有一些是特殊的字符常量,如‘\n‘,‘\t‘,‘ ‘等。分别代表换行、横向跳格和空格。

字符变量以char 来定义,一个变量只能存放一个字符常量,一个字符常量占1个字节内存空间。

字符串常量是由双引号括起来的字符序列。这里一定要注意‘a‘和"a"的不同,前者为字符常量,后者为字符串常量,c规定:每个字符串的结尾加一个结束标志‘‘,实际上"a"包含两个字符:‘a‘和‘‘。

6. 数值型数据间的混合运算

整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:

char,short -> int -> unsigned -> long -> double <- float

7. 运算符和表达式

c运算符包括:

算数运算符( + - * / % )

关系运算符( > < == >= <= != )

逻辑运算符( ! && || )

位运算符( << >> ~ | ^ & )

赋值运算符( = )

条件运算符( ? : )

逗号运算符( , )

指针运算符( * & )

求字节数( sizeof )

强制类型转换(类型)

分量运算符( . -> )

下标运算符( [ ] )

其它运算符( 如函数调用运算符( ) )

自增自减运算符( ++ -- )注意:++i和i++的不同之处,++i使用i之前先使i加1,i++使用i之后,使i加1。

逗号表达式的求解过程:先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。

第三章 最简单的c程序设计

1.c的9种控制语句:

if() ~ else~

for()~

while()~

do~while()

continue

break

switch

goto

return

程序的三种基本结构:顺序结构,选择结构,循环结构

2.数据输出

c语言不提供输入输出语句,输入输出操作是由c的库函数完成。但要包含头文件stdio.h。

putchar( ) 向终端输出一个字符

strlen() 函数 针对字符串,用来计算字符串的实际长度,不包括‘\0’

sizeof() 操作符,用来计算任意数据类型的内存占用大小。

strcat() 把第二个字符串接到第一个字符串的后面,第一个字符串后面的‘\0’结束符被取消。

printf( )的格式字符:

① d格式符 用来输出十进制整数

%d 按整型数据的实际长度输出

%md 使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度

%-md 使输出长度为m,如果数据长度小于m,则右补空格,如果大于m,则输出实际长度

%ld 输出长整型数据

② o格式符 以八进制形式输出整数

③ x格式符 以十六进制形式输出整数

④ u格式符 用来输出unsigned型数据,以十进制形式输出

⑤ c格式符 用来输出一个字符

⑥ s格式符 输出一个字符串

%s 输出实际长度字符串

%ms 输出的串占m列,如果串长度小于m,左补空格,如果大于m,实际输出

%-ms输出的串占m列,如果串长度小于m,右补空格

%m.ns 输出占m列,但只取字符串中左端n个字符并靠右对齐

%-m.ns m、n含义同上,靠左对齐,如果n>m,则m自动取n值

⑦ f格式符 以小数形式输出实数

%f 整数部分全部输出,小数部分输出6位

%m.nf 输出数据共占m列,其中有n位小数。如果数值长度小于m,左补空格

%-m.nf 同上,右补空格

⑧ e格式符 以指数形式输出实数

%e 系统指定6位小数,5位指数(e+002 )

⑨ g格式符 输出实数,根据数值大小,自动选f格式或e格式

3.数据输入

getchar( ) 从终端输入一个字符

scanf( 格式控制,地址列表) 标准C scanf中不使用%u,对于unsigned型数据,以%d或%o或%x输入。%后的*,用来跳过它相应的数据。

输入数据时不能规定精度如scanf( "%7.2f", &a );是不合法的。

scanf_s 是对%c和%s有特殊要求的,需要对字符或字符串指定宽度,如:scanf_s(“%c,%s”,&c,1,&s,10);

需注意scanf和scanf_s在使用时的区别。

第四章 逻辑运算和判断选取控制

1. 关系运算符:

c提供6种关系运算符(> < <= >= == != )前四种优先级高于后两种。

2. If语句

C提供了三种形式的if语句

If(表达式) 语句

If(表达式) 语句1 else 语句2

If(表达式1) 语句1

else if(表达式2) 语句2 

else 语句n

3. 条件运算符

(a>b)?a:b 条件为真,表达式取值a,否则取值b

4. Switch语句

Switch(表达式)

{

case 常量表达式1:语句1; break;

case 常量表达式2:语句2; break;

   …

case 常量表达式n:语句n; break;

  default :语句n+1;

}

第五章 循环控制

1. 几种循环语句

goto语句(现已很少使用)

while语句 先判断表达式后执行语句

do-while语句 先执行语句后判断表达式

for语句

2. Break语句和continue语句

Break语句用于跳出循环,continue用于结束continue以下的循环语句。

当型循环:先判断表达式的值,再执行循环体的内容

直到型循环:先运行一次循环体,再判断表达式的值

第六章 数组

1. 一维数组

C规定不能对数组作动态定义,只能静态对数组初始化,方括号内可以是符号常量(宏定义),但不能是变量。给数组初始化时可以不指定数组长度,编译器根据数组中被初始化元素的数量,自动确定数组长度。

当初始化元素的数量小于数组长度时,前n个元素被初始化,剩下的为0

如果不给数组初始化,数组的每个元素为默认值。

数组的最小下标是0  最大上标是数组长度-1

2. 二维数组

一个二维数组可以分解为多个一维数组

二维数组是按行排列的

求一个二维数组所占空间字节数公式:行数*列数*类型字节数=总字节数

若只对部分元素赋值,未赋值的元素自动取0值。

多维数组靠近数组名的第一个下标可以省略不定义,但其他的都必须定义其大小

3. 字符数组

字符型数据:字符型数据包括字符常量、转义字符常量、字符串常量、字符变量、符合常量。

字符常量:由单引号括起来的单个字符

转义字符常量:以反斜杠开头的特殊字符序列,意思是把反斜杠后面的字符转换成特定的含义

字符串常量:用双引号括起来的字符序列

c语言有字符常量和字符变量,有字符串常量,但没有专门存放字符串的变量,c语言用字符数组存放字符串。每个字符串以‘\0’结束。在字符数组中,第一个\0前面的所有字符和\0一起构成了字符串,\0之后的其他数组元素与该字符串无关。

定义字符数组时,数组长度>=有效字符个数+1 最后一个存放‘\0’,如果初值个数大于数组长度,则按照语法错误处理,初值个数小于数组长度,则只将花括号中的字符分别赋给数组中前面的元素,其余的元素自动定为空字符。

c允许用字符串的方式对数组作初始化赋值,列如:char ch[]=”china”;

用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志’\0’

Scanf(“%s”);函数输入时以回车和空格作为分隔符,gets()只以回车作为分隔符。

部分字符串处理函数 (需要包含头文件“string.h”)

puts(字符数组) 将一个字符串输出到终端。

gets(字符数组) 从终端输入一个字符串到字符数组,并且得到一个函数值,为该字符数组的首地址 (vs里需要写成gets_s)

strcat(字符数组1,字符数组2) 连接两个字符数组中的字符串,数组1必须足够大。

(vs里需要写成strcat_s)

Strcpy(字符数组1,字符串2) 将字符串2拷贝到字符数组1中。 (vs里需要写成strcpy_s)

Strcmp(字符串1,字符串2) 比较字符串,相等返回0,字符串1>字符串2,返回正数,小于返回负数。

Strlen(字符数组) 求字符串长度。

Strlwr( 字符串) 将字符串中的大写字母转换成小写 (vs里需要写成 _strlwr_s)

Strupr( 字符串)  将字符串中的小写字母转换成大写 (vs里需要写成 _strupr_s)

以上是一些比较常用的字符串处理函数。

第七章 函数

1. 关于形参和实参的说明

① 在函数被调用之前,形参不占内存

② 实参可以是常量、变量或表达式

③ 必须指定形参的类型

④ 实参与形参类型应一致

⑤ 实参对形参的数据传递是"值传递",即单向传递

2. 函数返回值

如果想让函数返回一个值,在函数中就要用return语句来获得,在定义函数时也要对函数值指定类型,如果不指定,默认返回整型。

3. 函数调用

1 注意在函数调用时实参和形参的个数、类型应一一对应。对实参表求值的顺序是不确定的,有的系统按自左至右,有的系统则按自右至左的顺序。这一点要注意。

2 函数调用的方式:函数语句,函数表达式,函数参数

3 如果主调函数和被调函数在同一文件中,并且主调函数在前,那么一般要在主调函数中对被调函数进行说明。除非: 被调函数的返回值类型为整型或字符型 被调函数出现在主调函数之前。

4 对函数的说明和定义是不同的,定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型、函数体等。说明则只是对已定义的函数返回值类型进行说明,只包括函数名、函数类型以及一个空的括弧,不包括形参和函数体。

5  c语言允许函数的递归调用(在调用一个函数的过程中又出现直接或间接的调用该函数本身)。

4. 数组作为函数参数

1 数组元素作为函数参数 和一般变量相同

2 数组名作参数应该在主调和被调函数分别定义数组,形参数组的大小可以不定义。注意:数组名作参数,不是单向传递。

3多维数组作参数,在被调函数中对形参数组定义时可以省略第一维的大小说明,但不能省略第二维或更高维的说明。

5. 局部变量和全局变量

从变量作用域角度分,变量可分为局部变量和全局变量。

1)内部变量(局部变量)

在一个函数内定义,只在函数范围内有效的变量。

2)外部变量(全局变量)

在函数外定义,可以为本文件其它函数所共用,有效范围从定义变量的位置开始

到本文件结束。建议尽量少使用全局变量,因为它在程序全部执行过程中都占用

资源,而且使函数的通用性降低了。如果在定义外部变量之前的函数要想使用该

外部变量,则应在该函数中用extern作外部变量说明。

2、当全局变量与局部变量同名时,局部变量将在自己作用域内有效,它将屏蔽同名的全局变量。

6. 动态存储变量与静态存储变量

从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。

C语言中,变量的存储方法分为两大类:静态存储类和动态存储类,具体包括:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。

1、局部变量的存储方式

函数中的局部变量如不作专门说明,都之auto的,即动态存储的,auto可以省略。局部变量也可以定义为static的,这时它在函数内值是不变的。静态局部变量如不赋初值,编译时系统自动赋值为0,动态局部变量如不赋初值,则它的值是个不确定的值。C规定,只有在定义全局变量和局部静态变量时才能对数组赋初值。为提高执行效率,c允许将局部变量值放在寄存器中,这种变量叫register变量,要用register说明。但只有局部动态变量和形式参数可以作为register变量,其它不行。

2、全局变量的存储方式

全局变量在函数外部定义,编译时分配在静态存储区,可以在程序中各个函数所引用。多个文件的情况如何引用全局变量呢?假如在一个文件定义全局变量,在别的文件引用,就要在此文件中用extern对全局变量说明,但如果全局变量定义时用static的话,此全局变量就只能在本文件中引用了,而不能被其它文件引用。

3、存储类别小结

从作用域角度分,有局部变量和全局变量

局部变量:自动变量,即动态局部变量(离开函数,值就消失)

     静态局部变量(离开函数,值仍保留)

寄存器变量(离开函数,值就消失)

 (形参可定义为自动变量和寄存器变量)

全局变量:静态全局变量(只限本文件引用)

              全局变量(允许其它文件引用)

从存在的时间分,有静态存储和动态存储

动态存储:自动变量(本函数内有效)

寄存器变量(本函数内有效)

 形参

静态存储:静态局部变量(函数内有效)

静态全局变量(本文件内有效)

全局变量(其它文件可引用)

从变量值存放的位置分

静态存储区:静态局部变量

          静态全局变量

全局变量

动态存储区:自动变量和形参

寄存器内:寄存器变量

7. 内部函数和外部函数

内部函数:只能被本文件中的其它函数调用,定义时前加static,内部函数又称静态函数。

外部函数:可以被其它文件调用,定义时前加extern,如果省略,则隐含为外部函数,在需要调用此函数的文件中,一般要用extern说明。

第八章 指针

指针:就是变量的地址。

指针变量:用来存放指针(地址)的变量。

& 取地址运算符

“*”指针运算符

1、指针变量的定义

类型标识符 *指针变量名 如:int *pointer;  该指针变量的类型是 int  *,int代表该指针变量指向的变量的类型,”*”代表这是一个指针变量。

1、给指针变量赋值

Int a=3;

int *pointer=&a;

意思是 把变量a的地址赋给指针变量。

Int *p=NULL; 给指针变量初始化,NULL是特殊字符,代表这是一个空指针。

2、指针变量的引用概念

int *p; int a=3; p=&a;

*p:代表指针变量指向的存储单元里面的内容

p等价 &a,*p等价 a,&*p等价 &a。

3、指针变量的++--

*p++ 指:指向的存储单元里面的值++。

p++ 代表 指针变量存储的地址++。

如果指向的变量是整型,则p++ 等价于 p+1*4

如果是实型,则p++ 等价于 p+1*4

如果是字符型,则p++ 等价于 p+1*1

4、数组与指针

数组指针:数组的起始地址。

数组元素指针:数组元素的地址。

① 数组名代表数组首元素的地址,相当于指向数组第一个元素的指针。

② 我们通常引用数组元素的形式是a[i],如果用指针可以这样引用,*(a+i),或定义一个指针变量p,将数组a的首地址赋给p,p=a;然后用*(p+i)引用。

注意:指针变量p指向数组a首地址,则p++指向数组a的下一元素地址,即a[1]的地址。

5、字符串与指针

字符串可以直接赋值给指针,不用定义字符数组,当赋值后,指针指向该字符串的首字符,指针指向字符串后,只能访问字符串的内容,不能通过指针对字符串做修改,因为该字符串是常量。但是这样做会产生内存垃圾,因为这个字符串不知道被分配到哪个地方了。

char *p=”hello”;

在c++里可以用函数new 动态分配一个内存空间,用完还可以释放:

int n; cin>>n; char *p=new char a [n];

释放指针指向的存储空间:delete[] p;

在c++里,cout语句对数组名和指针有特殊处理,如果输出数组名,则输出的是字符串,输出指针也一样,就像c的printf(“%s”);一样。想输出字符数组的起始地址需要这样写

cout<<static_cast<void*>(数组名)<<;

c++标准库中声明了一个string类型,是字符串类型,可以定义字符串变量,可以直接读入,输出,赋值字符串,可以使用关系运算符。

string string1,string2;

string1=”hello”;  cin>>string1;  string2=string1;  if(string1>string2)

6、二维数组与指针

① 数组名是指向数组第一行的指针

② “*a”等价于a[0],相当于让a下降了一级

③ “&a”表示指向整个二维数组的指针,相当于a上调了一级

④ 几个有用的结论

a、a[0]、&a[0][0]有相同的值

a+1表示第1行的地址

*(a+1)表示第1行第0列的地址

*a+1表示第0行第1列的地址

a[0]+1表示第0行第1列的地址

⑤ 二维数组指针的定义: int (*p)[列数值];

错误:int *p=a   正确:int (*p)[4]=a   正确:int *p=&a[0][0]

因为int *p是指向一个整型元素的指针,不能指向多个元素

⑥ 指针数组的定义:int *pointer[10] 定义包含10个基类型为整型的指针数组。

第九章 结构体

1、结构体定义

struct 结构体名字

{

变量名

};  //注意后面的冒号

组合型数据类型 结构体,将一组变量集合在一起,组成一个事物。

2、结构体变量的定义

① 结构体名+变量名 等于定义了新的相同的结构体,也可以在结构体”;”后面直接新定义名字

3、结构体与指针

① 定义:struct + 结构体名 + *指针名

② 调用:p -> name

③ -> 是指向运算符,优先级仅次于 () []。

③ 对指针 p++; 将跃过整个结构体

④ 对变量输入时,加 ”&”取地址符 scanf_s(“%d”, &p->name);

4、结构体与函数

① 结构体可以作函数形参,也可以作函数实参

② 结构体名作参数,是值传递,结构体指针作参数,是地址传递

第十章 链表

1、链表将分散的内存数据集合起来,定义与结构体相同

2、结构体内有一个指针,该指针代表指向下一片相同的内存空间

第十一章 枚举

1、枚举的定义

enum 枚举类型 {元素1,元素...};

2、枚举变量的定义:  enum 枚举类型 枚举变量名

3、枚举结构与数组相同,每个元素都有特定的含义,是常量,不可赋值,每个元素都有下标

4、不能给枚举变量赋其他值,枚举变量只能接收 枚举元素。给枚举变量赋值整数,应先强制类型转换 变量=(enum 枚举类型)1;

原意是把枚举下标为1的元素赋给变量。

5、输出变量时,会输出元素的下标

6、枚举型可以比较

时间: 2024-11-09 23:57:47

C语言 笔记的相关文章

C语言笔记1--类型、运算符与表达式

 C语言笔记1--类型.运算符与表达式 总论: 变量和常量是程序处理的两种基本的数据对象.声明语句说明变量的名字和类型,也可以指定变量的初值.运算符指定将要进行的操作.表达式则把变量与常量组合起来生成新的值.对象的类型决定该对象可取值的集合以及可以对该对象执行的操作. 一.变量与常量的名字 1.名字是由字母.下划线和数字组成的序列,其第一个字符必须为字母:下划线"_"被看做是字母,但一般不要以下划线"_"开头. 2.名字区分字母大小写,变量名使用小写字母.符号常量

C++语言笔记系列之十二——C++的继承

C++的继承 1.继承方式 public(公有继承) 派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员. 派生类的对象只能访问基类的public成员. protected(保护继承),private(私有继承) 派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员. 派生类的对象不能访问基类的任何成员. 2.例子 example 1: #include <iostream.h> clas

C语言笔记

C语言笔记 基础知识 数据类型 序号 类型与描述 1 基本类型: 它们是算术类型,包括:整数类型.浮点类型 2 枚举类型: 也是算术类型,被用来定义只能使用某些整型值的变量,使用时需要程序员先使用eumn关键字来声明定义 3 Void类型: 用于函数,指明函数的返回值或参数.作用于变量会发生编译错误 4 派生类型: 包括:指针类型.数组类型.结构类型.联合体类型.函数类型 补充:1.函数类型是指函数返回值的类型,数组类型与结构类型统称为聚会类型. 2.除了基本类型,其他的类型都是程序员使用相关关

C++语言笔记系列之十六——赋值兼容规则&amp;多继承的二义性

1.赋值兼容规则 (1)派生类对象可以给基类对象赋值,这种情况下派生类对象将从基类继承的成员的值赋值给一个基类对象:但是不允许将一个基类的对象赋值给一个派生类. (2)可以将派生类对象的地址赋给基类指针,使基类指针指向派生类对象,通过基类指针引用成员时只可以引用派生类从基类继承而来的成员,而不允许引用派生类的新成员. (3)引用与指针相同. 2.多继承 (1)一个派生类从两个以上的基类中去继承. (2)说明: class 派生类名:继承方式 基类1, 继承方式 基类2,...... {派生类成员

C++语言笔记系列之十七——虚基类

1.虚基类 考虑这样一种情况:当某个类的部分或者全部直接基类是另一个共同基类派生而来,这些直接基类从上一级基类继承而来的成员就一定拥有相同的名称,这样就会产生二义性问题. 解决办法:当派生类和直接基类产生了二义性问题-->加类的作用域. 当派生类和间接基类产生了二义性问题-->虚基类. 2.虚基类的说明: class 派生类名:virtual 访问权限 基类名 {派生类定义}; 注意:在定义派生类时将需要继承的基类进行虚化声明,虚基类的说明在派生类的定义中完成. 作用:将基类说明为虚基类之后,

C++语言笔记系列之十三——派生类构造函数的调用

1.派生类构造函数的调用 (1)一个基类的所有数据成员均被派生类继承.创建一个派生类对象时,系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类构造函数,而且要调用基类构造函数. 派生类中的数据成员在派生类中构造. 基类中的数据成员在基类中构造. 原因: A.构造函数不继承. B.派生类的构造函数必须通过调用基类的构造函数完成基类数据成员的初始化. C.若派生类中含有子对象,必须调用子对象的构造函数. 2.派生类的构造函数 派生类名(总参数

C++语言笔记系列之十八——虚函数(1)

1.C++中的多态 (1)多态性:同一个函数的调用可以进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接,即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态联编:在编译阶段就完成的函数联编--函数重载. B.动态联编:在程序的运行阶段由系统自动选择具体的函数--虚函数. 注:C++的多态主要指的就是动态联编. 2.虚函数 (1)虚函数是在函数的定义时将其声明为虚函数即可. (2)说明:virtual 数据类型 函数名(参数表) {函数体} A.目的:当

C++语言笔记系列之十四——继承后的访问权限

1.析构函数不继承:派生类对象在析构时,基类析构函数的调用顺序与构造函数相反. 注:派生类对象建立时要调用基类构造函数,派生类对象删除时要调用基类析构,顺序与构造函数严格相反. 2.例子 example 1 #include <iostream.h> #include <math.h> class Point { public: Point(double a, double b, doule c) { x = a; y = b; z = c; } double Getx() {re

C++语言笔记系列之十五——派生类、基类、子对象的构造和析构函数调用关系

例子 example 1 注:若一个基类同时派生出两个派生类,即两个派生类从同一个基类继承,那么系统将为每一个简历副本,每个派生类独立地使用自己的基类副本(比如基类中有属于自己类的静态变量等). #include <iostream.h> class Person { public: person() {cout<<"Construction of person."<<endl;} ~person() {cout<<"Destr

C++语言笔记系列之十——静态成员

1.静态成员 (1)由关键字static修饰 静态变量定义语句在编译阶段就执行,运行过程中不再执行. (2)分类:静态数据成员.静态成员函数. (3)静态成员时类的所有对象共享的成员,而不是某一个对象的成员. 2.静态成员的使用 (1)在定义说明前加上static关键字.例如: static int x: (2)静态数据成员必须进行初始化,并且初始化必须在类外完成. (3)静态数据成员的初始化 数据类型 类名::静态数据成员名 = 值://注意这里没有static出现 (4)绝对不能使用对象名来