C
CC
C++
++++
++笔记
笔记笔记
笔记.
..
.txt
txttxt
txt
tarena
tarenatarena
tarena
b
bb
b0
00
0b
bb
b986
986986
986fdf
fdffdf
fdf5
55
5-
--
-552
552552
552c
cc
c365682
365682365682
365682-
--
-997671
997671997671
997671f
ff
f95
9595
95f
ff
f
1
1 1
1.
..
.对象之间可以相互转换
对象之间可以相互转换对象之间可以相互转换
对象之间可以相互转换,
,,
,有向上和向下转换
有向上和向下转换有向上和向下转换
有向上和向下转换.
..
.向下是基类转换成排成类
向下是基类转换成排成类向下是基类转换成排成类
向下是基类转换成排成类(
((
(不安全
不安全不安全
不安全)
))
),
,,
,向上是
向上是向上是
向上是
派生类转换成基类
派生类转换成基类派生类转换成基类
派生类转换成基类.
..
.
2
2 2
2.
..
.把派生类的对象当作基类的对象来调用
把派生类的对象当作基类的对象来调用把派生类的对象当作基类的对象来调用
把派生类的对象当作基类的对象来调用,
,,
,就用基类的指针指向派生类的对象
就用基类的指针指向派生类的对象就用基类的指针指向派生类的对象
就用基类的指针指向派生类的对象.
..
.
Teacher teacher
Teacher teacherTeacher teacher
Teacher teacher;
;;
;
Person
PersonPerson
Person*
* *
* p
pp
p=
= =
= &
&&
&teacher
teacherteacher
teacher;
;;
;
3
3 3
3.
..
.若想实现被派生类覆盖的基类
若想实现被派生类覆盖的基类若想实现被派生类覆盖的基类
若想实现被派生类覆盖的基类,
,,
,就必须使用调用基类名
就必须使用调用基类名就必须使用调用基类名
就必须使用调用基类名::
::::
::函数名
函数名函数名
函数名()
()()
()来实现
来实现来实现
来实现
4
4 4
4.
..
.友元有友元类和友元函数
友元有友元类和友元函数友元有友元类和友元函数
友元有友元类和友元函数,
,,
,破坏了封装
破坏了封装破坏了封装
破坏了封装.
..
.
5
5 5
5.
..
.静态成员包括
静态成员包括静态成员包括
静态成员包括:
::
:静态数据成员和静态成员函数
静态数据成员和静态成员函数静态数据成员和静态成员函数
静态数据成员和静态成员函数
前者又被称为类变量
前者又被称为类变量前者又被称为类变量
前者又被称为类变量,
,,
,必须再类外声明并初始化
必须再类外声明并初始化必须再类外声明并初始化
必须再类外声明并初始化,
,,
,如果不初始化就被默认为
如果不初始化就被默认为如果不初始化就被默认为
如果不初始化就被默认为0
00
0,
,,
,
访问方式
访问方式访问方式
访问方式:
::
:类名
类名类名
类名::
::::
::静态成员名
静态成员名 静态成员名
静态成员名 &&
&& &&
&& 对象
对象对象
对象.
..
.静态成员
静态成员静态成员
静态成员(
((
(不推荐
不推荐不推荐
不推荐)
))
)
后者没有当前对象
后者没有当前对象后者没有当前对象
后者没有当前对象,
,,
,只能访问静态成员
只能访问静态成员只能访问静态成员
只能访问静态成员,
,,
,访问方式
访问方式访问方式
访问方式:
: :
: 类名
类名类名
类名::
::::
::函数名
函数名函数名
函数名()
()()
()
---------
--------- ---------
---------函数体内所有对数据成员的访问都会转换成
函数体内所有对数据成员的访问都会转换成函数体内所有对数据成员的访问都会转换成
函数体内所有对数据成员的访问都会转换成“this
“this“this
“this-
--
->
>>
>数据成员
数据成员数据成员
数据成员”
””
”的方式
的方式的方式
的方式
6
6 6
6.
..
.再类中
再类中再类中
再类中,
,,
,如果没有使用动态的内存空间
如果没有使用动态的内存空间如果没有使用动态的内存空间
如果没有使用动态的内存空间,
,,
,就不用重载拷贝构造函数
就不用重载拷贝构造函数就不用重载拷贝构造函数
就不用重载拷贝构造函数,
,,
,浅拷贝
浅拷贝浅拷贝
浅拷贝
如果使用了动态内存空间
如果使用了动态内存空间 如果使用了动态内存空间
如果使用了动态内存空间,
,,
,就需要重载拷贝构造函数
就需要重载拷贝构造函数就需要重载拷贝构造函数
就需要重载拷贝构造函数,
,,
,深拷贝
深拷贝深拷贝
深拷贝
7
7 7
7.
..
.如果没有自己重载相同类型之间的赋值运算符
如果没有自己重载相同类型之间的赋值运算符如果没有自己重载相同类型之间的赋值运算符
如果没有自己重载相同类型之间的赋值运算符,
,,
,系统会默认提供一个
系统会默认提供一个系统会默认提供一个
系统会默认提供一个,
,,
,因为要和拷贝构造
因为要和拷贝构造因为要和拷贝构造
因为要和拷贝构造
函数一样进行
函数一样进行函数一样进行
函数一样进行
内存拷贝
内存拷贝 内存拷贝
内存拷贝,
,,
,因此在需要重载拷贝构造函数的地方一般也需要重载赋值运算符
因此在需要重载拷贝构造函数的地方一般也需要重载赋值运算符因此在需要重载拷贝构造函数的地方一般也需要重载赋值运算符
因此在需要重载拷贝构造函数的地方一般也需要重载赋值运算符
--------------
----------------------------
--------------赋值运输符不能作为友元
赋值运输符不能作为友元赋值运输符不能作为友元
赋值运输符不能作为友元-----------------
----------------------------------
-----------------
8
8 8
8.
. .
. 不能重载的运算符
不能重载的运算符不能重载的运算符
不能重载的运算符: ./.*/::/
: ./.*/::/: ./.*/::/
: ./.*/::/?
??
?:/
:/:/
:/sizeof
sizeofsizeof
sizeof/
//
/#
##
#/
//
/##
## ##
##
=/[]/()/-
=/[]/()/- =/[]/()/-
=/[]/()/->
>>
>/-
/-/-
/->
>>
>*
**
*和类型转换函数只能作为成员函数来重载
和类型转换函数只能作为成员函数来重载和类型转换函数只能作为成员函数来重载
和类型转换函数只能作为成员函数来重载
所有一元运算符按照成员函数来重载
所有一元运算符按照成员函数来重载 所有一元运算符按照成员函数来重载
所有一元运算符按照成员函数来重载;
;;
;
所有二元运算符按照友元来重载
所有二元运算符按照友元来重载 所有二元运算符按照友元来重载
所有二元运算符按照友元来重载
函数的重载和实参的类型和参数的个数有关
函数的重载和实参的类型和参数的个数有关 函数的重载和实参的类型和参数的个数有关
函数的重载和实参的类型和参数的个数有关,
,,
,一般和函数的返回类型没有关系
一般和函数的返回类型没有关系一般和函数的返回类型没有关系
一般和函数的返回类型没有关系.
..
.
9
9 9
9.
..
.EOF
EOFEOF
EOF:
::
:文件结束符 值一般为
文件结束符 值一般为文件结束符 值一般为
文件结束符 值一般为-
--
-1
11
1
get
get get
get():
():():
():读入一个字符并返回他的值
读入一个字符并返回他的值读入一个字符并返回他的值
读入一个字符并返回他的值
istream
istream istream
istream &
&&
&get
getget
get(
((
(char
charchar
char&
& &
& ch
chch
ch):
): ):
): 读入一个字符并把它存储再
读入一个字符并把它存储再读入一个字符并把它存储再
读入一个字符并把它存储再ch
chch
ch中
中中
中
istream
istream istream
istream &
&&
&get
getget
get(
((
(char
charchar
char*
* *
* buffer
bufferbuffer
buffer,
,,
,streamsize num
streamsize numstreamsize num
streamsize num):
):):
):
读取字符到
读取字符到读取字符到
读取字符到buffer
bufferbuffer
buffer直到
直到直到
直到num
numnum
num-
--
-1
11
1个字符被读入
个字符被读入个字符被读入
个字符被读入,
,,
,或者碰到
或者碰到或者碰到
或者碰到EOF
EOFEOF
EOF或换行标志
或换行标志或换行标志
或换行标志
istream
istream istream
istream&
& &
& get
getget
get(
((
(char
charchar
char*
* *
* buffer
bufferbuffer
buffer,
, ,
, streamsize num
streamsize numstreamsize num
streamsize num,
,,
,char delim
char delimchar delim
char delim):
):):
):
读取字符到
读取字符到读取字符到
读取字符到buffer
bufferbuffer
buffer直到
直到直到
直到num
numnum
num-
--
-1
11
1个字符被读入
个字符被读入个字符被读入
个字符被读入,
,,
,或者碰到
或者碰到或者碰到
或者碰到EOF
EOFEOF
EOF或
或或
或delim
delimdelim
delim(
((
(delim
delimdelim
delim直到下一
直到下一直到下一
直到下一
次不会被读取
次不会被读取次不会被读取
次不会被读取)
))
)
instream
instream instream
instream&
& &
& get
getget
get(
((
(streambuf
streambufstreambuf
streambuf&
& &
& buffer
bufferbuffer
buffer):
):):
):
读取字符到
读取字符到读取字符到
读取字符到buffer
bufferbuffer
buffer中
中中
中,
,,
,直到碰到换行或
直到碰到换行或直到碰到换行或
直到碰到换行或EOF
EOFEOF
EOF
instream
instream instream
instream&
& &
& get
getget
get(
((
(streambuf
streambufstreambuf
streambuf&
& &
& buffer
bufferbuffer
buffer,
,,
,char delim
char delimchar delim
char delim):
):):
):
第
第 第
第 1
1 1
1 页
页页
页