c++第六章知识总结

                    第六章——类和对象

一、类的定义
1、基本思想:数据抽象和封装。
2、抽象数据类型(ADT)包括两部分:一组数据和对这些数据的操作。定义时,最常见的方式是采用结构体(描述数据)加全局函数(描述对这些数据的操作),数据以参数的形式传递给参数。
既然是抽象,指的就是概括描述,并不表示特指。
3、成员函数:结构体内的函数;数据成员:结构体中的数据。这样的结构体成为类,这种结构体类型的变量被称为对象。
4、成员函数像数据成员一样,不能独立使用,必须由结构体类型的变量使用成员选择语法来进行调用。
5、创建对象时,类内初始值将用于初始化数据成员,没有初始值的成员将被默认初始化。赋初值时不能使用圆括号。
6、成员函数在类外定义时,函数名字前面要加名字和作用域符“::”,表示该函数是在所属的类作用域内,是这个类的成员函数,不同于全局函数。
7、成员函数为内嵌函数,不多于五行且无循环语句。在类内类外定义的区别为是否默认为inline函数。
二、访问控制和封装
1、访问限定符:关键字public、private和protected,在类定义中使用。一般语法为:struct 类名{
public:
公有成员声明;
private:
私有成员声明;
protected:
被保护成员声明;
};
2、访问限定符的出现次数合顺序没有限制,一个访问限定符的作用会持续到出现下一个访问限定符或类定义结束。若没有指定限定符,struct成员默认访问public。
3、private成员只能由类自己的成员函数或友元访问。public任何函数或类中都能被访问。
4、结构体或类以分号结束,公有成员在任何情况下都可使用“数据名.成员名”,数据成员一般限定为私有;成员函数一般公有。
5、对象是数据和操作的封装体,是客观事物的抽象,类是一组具有相同属性和行为的对象的抽象,对象又被称为类的实例。
6、面向对象编程的主要工作就是创建一组对象并给他们发送信息。对象能持有的数据和接收的消息由他们所属的类决定。
7、class成员没有限定符时,默认为private。
8、sizeof运算符可以用于类类型、对象和类的数据成员。
9、每个成员函数都有一个隐含的参数,指向接收信息的对象,称为this指针。X类的this指针的类型是X*。
10、this指针是常量,含有当前实施调用的对象的地址。不能改变this指针的值,也不能取this指针的地址。
11、this在成员函数中得作用:①区分与局部变量重名的数据成员②返回当前对象③获取当前对象的地址。
12、对类内private数据成员,提供public成员函数访问。访问器函数命名为getXX,修改器函数名为setXX。
13、在类中声明一个函数friend,使非成员函数能访问类中私有数据。注意:友元必须在被访问的类中声明,一个类的友元可为全局函数、另一个类的成员函数或另一个类。
三、构造函数和析构函数
1、对象实质上是一块存储区,在其中存放数据,并隐含着对这些数据进行处理的操作。
2、构造函数是一种特殊的成员函数,能在创建对象时被自动调用,负责对象的初始化。构造函数跟类的名字相同,没有返回类型!!!构造函数的参数通常为数据成员提供初始值。其可以重载。
3、构造函数的名字和类型要一致,至少写两个,一个无参(在默认初始化时调用),一个带参。
4、引用类型不能用赋值的方式提供初值。
5、构造函数初始化列表:
成员1(初始值1)[,成员2(初始值2),…]
初始化列表位于构造函数的参数表之后,函数体之前:
构造函数(参数表):初始化列表{函数体}
6、若成员为const、引用,或者是未提供默认构造函数的类类型,必使用构造函数初始化列表为成员提供初值。
7、在初始化列表中,每个成员只能出现一次。成员初始化的顺序与他们在类定义中出现的顺序一致。构造函数初始化列表中初始值的先后关系不会影响实际的初始化顺序!!!
8、委托构造函数:
eg:Classname (参数表):Classname(参数表){函数体}
9、对象如何定义:①类名 对象名(对象分配空间,但数据无初始化)②类名 对象名(实参列表) 初始化
10、析构函数负责在对象生存期结束时返回相关资源合自动释放资源。其名字是类名字前加波浪线“~”。析构函数没有返回类型,也没有任何参数。不能重载。只能为一个类定义唯一一个析构函数。会被自动地隐式调用。
四、const成员
1、用const限定类中的数据成员,其数据成员常用以描述对象的常量。在数据成员声明前加const关键字就将其限定为常量。
2、声明const成员函数的语法形式:
返回类型 成员函数名(参数表) const;
定义const成员函数的语法形式:
返回类型 成员函数名(参数表) const {函数体}
3、只有声明为const的成员函数才可被const对象调用。
4、const成员函数的定义合调用得几种情况:
非const——非const调用,const对象不能调用
const——非const和const对象都能调用
五、static成员
1、静态数据成员被当做类类型内部的全局变量。静态数据成员在整个类中只有一份,由类的所有对象共享访问。
2、静态成员可以是private成员。
3、其特点:属于整个类,不专属于某个对象。
4、static数据成员不能在构造函数中初始化。要在类定义之外初始化,定义时使用类名字限定静态成员名。static成员只能定义一次,一般放在包含成员函数的源文件中。
5、静态数据成员可以是任何类型,甚至是所属类类型。
6、类中的常量—static const成员
初始化在类外,类外定义时要加const关键字。但是!!允许在类定义里初始化整值类型的常量,其他类型不行。
7、静态数据成员的访问
非成员函数访问静态数据成员的方式:①成员访问运算符“.”或“—>”②类名限定的静态成员名
8、普通成员函数必须通过对象或对象的地址调用,不依赖对象而存在的成员函数可声明为静态成员函数。
9、静态成员函数的声明是在类定义中的函数声明前加static关键字,再类外定义静态成员函数时不需要加。
10、静态成员函数没有this指针。所以静态成员函数不能访问非静态数据成员,也不能调用非静态成员函数,也不能声明为const或volatile。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值