C++第三章总结

来源:互联网 发布:剑三苍云捏脸数据 编辑:程序博客网 时间:2024/05/22 07:44


3.1面向对象程序设计概述

3.1.1程序组织/设计的方法

常用的程序组织/设计的方法大体有两种:结构化的程序设计和面向对象的程序设计。

1.结构化程序设计缺陷:a难以适应大型软件的设计 b程序可重用性差

3.1.2面向对象程序设计的基本概念

类与对象

类的定义:
类规定同一类对象的共同特征,其定义的一般形式为:

class<类名>{    private:    <私有的数据和函数>    protected:      <保护的数据和函数>   public:    <公有的数据和函数>};类的定义包括了以下4部分:
1.关键字class和类名是程序为类起的名字,在命名时须满足对标浮的规定。
2.左花括号“{”,
3.声明数据和函数,数据就是C++变量,函数就是一般的C++函数类中的数据称为数据成员,函数称为成员函数。
4.右花括号“}”和分号“;”。注意在定义类时最后的分号不可省略。
二.由于对象的封装性类的成员函数是对类的私有数据成员进行操作的唯一途径。
1.类内定义
类内定义的格式为:<类型> <成员函数>(<参数表>){函数体}
2.类的定义
类外定义的函数必须在类体内进行声明这样它才能成为类的一部分
类内声明的格式为: <类型> <类成员函数名> <参数表>;
类外实现格式:     <类型><类名>::<成员函数名>(<参数表>)
                             <成员函数体>
成员函数定义的结构与普通函数不同的地方是:在类型和成员函数名之间加了一个类名和双冒号“::”,“::”是c++中新增的作用域限定符。
三.类成员的存取权限
成员函数和数据成员的存取权限有3级:公有的,保护的,私有的。
1.公有成员用public关键字声明,它定义了类的外部接口只有公有成员才能被用户程序直接访问
2.私有成员用private关键字声明,它定义了类的内部使用的数据和函数私有成员只有被自己所属类的成员函数访问,用户程序不能直接访问
3.保护成员用protected关键字声明存在权限介于公有成员和私有成员之间,它在类的继承中使用
一个类可以没有私有成员,但一般要有公有成员
四.成员函数的重载
 类的成员函数同普通函数一样也可以进行重载
3.2.2对象
对象是类的实例,是程序中用来表示客观实体的基本单位
1.对象的定义格式:
<类名><对象名表>
2.对象成员的表示方法
对象成员有数据成员和成员函数,一般对象的成员表示如下:
<对象名>.<成员名>或者<对象名>.<成员名>(<参数表>)
这里的“.”是一个运算符该运算符的功能是表示对象的成员
还可以通过指向对象的指针来访问
格式如下:
<对象指针名>-><成员名>或者<对象指针名>-><成员名><参数表>
“->”用来表示面向对象的指针的成员  “.”用来表示一般对象的成员
对于数据成员和成员函数,以下两种表示方式是等价的: 
<对象指针名>-><成员名>与(*<对象指针名>).<成员名>
3.2.3构造函数
1.构造函数的特点
a.不能在程序中直接调用,而是当创建类的对象时由系统自动调用
b.函数名与类名相同,可以有任意类型的参数,也可以重载
c.不能有返回值即使void类型也不行
构造函数的作用是:对数据成员赋初值,为使用动态内存的对象申请动态内存空间等
2.默认的构造函数
如果一类没有定义构造函数,编译器会自动生成一个不带参数的默认构造函数其格式下:
<类名>::<默认构造函数名> (){}
3.带参数的构造函数
当用带参数构造函数创建对象时,需要给出构造函数的参数
<类名><对象名>(构造函数参数)
a.一旦定义了构造函数,编译器便不再为类生成默认的构造函数
b.构造函数一般不能声明为私有的,将构造函数声明为私有将阻止外部代码创建本类的对象
构造函数的调用是在对象产生时,全局对象,静态对象,局部对象,堆对象产生的时机不同,因而构造函数的调用时间也不同
3.2.4析构函数
1.特点:
a.当一个对象消失或用new创建的对象用delete删除时,由系统自动调用类的析构函数,析构函数只供系统自动调用,用户不能在程序中显示地调用类的析构函数
b.析构函数的名字有类的名字类名加符号“~”构成
c.析构函数不能有参数也不能有返回值
d.由于没有参数析构函数不能重载,以各类中只可能定义一个析构函数
作用:进行对象清除,释放内存等
2.有关问题说明
a.如同默认构造函数一样,如果一个类没有定义析构函数,编译器会自动生成一个默认析构函数
b.全局对象,静态对象,局部对象,堆对象被销毁的时机不同,因而析构函数的调用时机也不同
c.对于普通的类,一般不需要定义析构函数,但对于在构造函数内用new操作符申请了动态内存的类,为保证在对象撤销时将动态内存归还系统,应定义析构函数,并在其中使用delete操作符释放内存
3.2.5复制构造函数
1.复制构造函数的概念
类的复制构造函数是类的一种特殊构造函数,当用一个已存在的对象来构造另一个新创建的对象时,系统自动调用类的复制构造函数
2.复制构造函数的特点
复制构造函数具有构造函数的一切特点,但参数只有一个,且必须是该类引用对象
注:引用符号“&”不能去掉
3.复制构造函数被调用的时机
a.用类的一个对象去初始化该类的另一个对象时
b.函数的形参是类的对象,调用该函数进行形实参结合时
c.函数的返回值是类的对象,函数执行完返回值调用时
3.2.6this指针
一个类可以生成多个对象,类的每个对象内都有一份类定义的数据成员的备份,但却没有类的成员函数的备份,类的成员函数在内存中仅有一份。它不属于某个对象。而是供类的所有对象共享
3.2.7静态成员
1.静态数据成员
类的静态数据成员是类的所有对象共享的成员,特不属于某个对象,它不因对象的建立而产生也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的封装性
访问权限同普通成员一样
声明语法如下:sttic<类型> <静态数据成员>;
类内声明一个静态数据成员并没有真正创建这一成员,静态数据成员必须在类外创建并初始化
静态数据成员的初始化语法如下:<类型><类名>::<静态数据成员>=<值>;引用静态数据成员时采用如下格式:<类名>::<静态数据成员>或<对象名>.<静态数据成员>或<对象名指针>-><静态数据成员>
2.静态成员函数
类的成员函数也可以使用三塔题词关键字修饰,从而成为静态成员函数statec <返回值类型><函数名>(参数列表){函数体}
静态成员函数与非静态成员函数区别:
编译器不为静态成员函数添加this指针,其实有参数与声明参数完全一致,由于无this指针,静态成员函数数不能直接访问类的非静态成员
3.2.8友元函数和友元类
友元函数
C++允许说明一个外部函数为类的友元函数,友元函数仍是独立的外部函数,但却能像类的成员函数一样访问类的所有成员,包括类的私有成员
说明:
1.类内声明友元函数的方法:函数原型前加friend关键字
2.print()函数仍是一个独立的全局函数它不是A类的成员函数,但有权访问A类的所有成员
3.友元函数破坏了类的封装性,但在某些情况下提高了效率
友元类
C++也允许说明一个类为另一个类的友元类,如果A类是B类的友元类,则A类中所有的成员函数可以像友元函数一样访问B类中的所有成员。友元关系不可以被继承
 
原创粉丝点击