C++_2

    近一个月学习了类对象,使得我对c++有了一个全新的认识。可这月的c++学习开拓了一种全新的思维方式。

    面向对象编程的主要工作就是创建一组对象并给它们发送消息。

    类设计是面向对象编程的核心。

    面向对象的一个重要特征就是对象具有唯一标识,都是可区分的,所以每个对象都有唯一的存储地址,无数据成员对象的大小至少是1。

    对象的所属类型称为类,类是对一组具有相同属性和行为的抽象。

    类的基本思想是数据抽象和封装。数据抽象是一种依赖接口和实现分离编程的技术。将数据和操作捆绑在一起,并加上访问控制,这在面向对象中称为封装。

    用来定义类的关键字我所学到的有struct、class和union三种。class和struct的定义稍有区别:如果class成员没有设置访问限定符,则默认为private;而struct成员的默认访问限定是public。union和struct一样,其成员的默认访问限定是public,但是其数据成员的存储方式不同于class和struct定义的类:union类的每个成员都是从对象的首地址开始存放,所以同一时间只有一个数据成员有效。

    结构体内的函数被称为成员函数,结构体中的数据则称为数据成员。这样的结构体被称为类,这类结构体类型的变量被称为对象。

注意:成员函数像数据成员一样,不能独立使用,必须由结构体类型的变量使用成员语法来进行调用。

    c++11允许为数据成员提供一个类内初始值,创建对象时,类内初始值讲用于初始化数据成员。没有初始值的成员将被默认初始化。数据成员类内初始值只能放在等号"="右边,或者放在花括号"{}"里,不能使用圆括号"()"。

    c++中每个类定义都引入了一个类作用域,类定义中声明的数据成员和成员函数都具有类作用域。

注意:成员函数在类外定义时,函数名字前面要加类名字和作用域符"::",表示这个函数是在其所属的类作用域内,是这个类的成员函数,不同于全局函数。

    this指针:每个成员函数都有一个隐含的参数,指向接收消息的对象,成为this指针。

this指针是一个常量,含有当前实施调用的对象的地址。不能改变this指针的值,也不能取this指针的地址。

this指针在函数中最常用于:1、区分与局部变量重名的数据成员;2、返回当前对象;3、获取当前对象的地址。

    访问器和修改器:将数据成员限定为private,并提供public成员函数来对其进行访问,这种成员函数被称为访问器和修改器。数据成员XX的访问器函数一般命名为getXX,修改器函数名为setXX。访问器和修改器很好的体现了封装的概念。

    友元:类的友元可以访问类的私有数据。

在声明友元时要遵守一条规则:友元必须在被访问的类中声明。一个类的友元可以是全局函数、另一个类的成员函数或另一个类。类A是类B的友元隐含着A的所有成员函数都是B的友元。

注意:1、友元关系是不可以传递的2、友元关系是不可以继承的:基类的友元不会自动成为其派生类的友元。

    构造函数和析构函数:

    构造函数是一种特殊的成员函数,能够在创建对象时被自动调用,负责对象的初始化。构造函数的名字和类名字相同,它没有返回类型(注意:不是void类型)。构造函数的参数通常为数据成员提供初始值。

注意:定义构造函数时至少定义两个,其中一个是不带参数的(说明对象时未带实参)。

初始化由构造函数完成,引用成员的初始化也应该在构造函数中,但又不能在函数体中使用赋值方式提供赋值。针对这种情况有一种特殊的语法,称为构造函数初始化列表:

成员1(初始值1)[,成员2(初始值2),…]

初始化列表位于构造函数的参数表之后,函数体之前:

构造函数(参数表):初始化列表{函数体}

注意:1、初始化列表中初值排列顺序不影响实际初始化顺序2、写在构造函数的函数体中 是成员先默认初始化,再在此处赋初值;在写初始化列表中,是直接初始化数据成员。

    析构函数:c++中,由析构函数负责在对象生存期结束时返回相关资源和自动释放资源。当对象离开作用域时,或者delete释放在堆上创建的对象时,析构函数都会被自动调用。

const成员:

1)const是修饰this指针, 使得this这个常量指针指向一个常量,即 const * (const)this,所以const成员函数不会改变数据成员(非静态)。

2)常量对象,以及指向常量对象的引用或指针可以并且只能访问const成员函数。

3)非常量对象在const成员函数和非const成员函数两个版本中会选择非const成员函数。

注意:1、必须在构造函数初始值列表进行初始化,(或者申明const成员变量为static,可在类内初始化)2、const成员必须初始化 通过构造函数初始值列表提供初值; 只能在对象创建的时候进行初始化; 或者同时申明为static,可以在类内初始化3、引用成员必须初始化 通过构造函数初始值列表提供初值

static成员:

1)静态数据成员,必须要在类外定义,没有this指针,没有构造函数会初始化它,不属于任何对象。

注意:类外定义静态数据成员,指明所属类名,以免和一般静态数据混淆。

2)静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。

3)静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。

4)静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。 普通数据成员的只能声明为 所属类类型的 指针或引用。

5)const成员函数可以改变static数据成员

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值