C++学习笔记之类与对象

  所谓万物皆对象,世界上的每一个存在的物质都可以看成一种“对象”。每个对象都会有自己的属性,自己的“行为”。然而物以类聚,每种对象都会有一个类群,他们有着相同的特征,也会有自己独特的地方。

 今天,我想分享一下我自己一些浅薄的学习体会。C++基于C不同的功能 -- 面向对象程序设计。面向对象编程技术使得我们可以更好的描绘我们的现实世界,它带给了我们想象不到的魅力,赐予了程序员创造新天地的能力。这也是吸引我的一个地方。

面向对象程序设计有四个基本的特征:抽象,继承,多态,封装。什么是抽象,具体的对立。抽象是指一类事物,它有大概的轮廓,但是却给人一个模糊的感觉。抽象是从具体的事物中抽走了很形象的东西。类就是面向对象编程里面一种抽象的数据结构,它有它的属性(成员数据),行为(成员函数)。而对象则是对类这种数据结构的具体化。

类是一种数据结构,其对象可以看作是在这种数据结构下的一个变量。类由关键词 class<类名> ,和类体构成。类体里面包含了成员数据的声明和成员函数的声明。类的成员数据就相当于是类的特征,而成员函数则是类的行为,类的成员数据默认是私有属性,外界是无法访问的,而成员函数则是对外界的接口,向外界展示类的信息。

类的所有成员都有相应的属性,包括私有,保护,和公有属性。私有属性就相当于私有的财产,外界肯定是无法了解的,保护也是一样受保护的,只有公有属性的成员才能让外界了解到。当对象需要访问私有或保护成员的时候,只能在成员函数中间接访问,而不能在外部访问,也只有公有的成员可以在外部访问。

说到成员函数,有静态成员函数和非静态成员函数。非静态成员函数有一个独特的变量---this 指针。this指针是一个类里面的局部变量,属于非静态常量,一个类里面仅有一个this指针。 当对象调用非静态成员函数时 编译器自动把对象的地址赋值给this指针,所以不需要传入对象的地址,而当调用静态成员函数时,要给一个属于该类的对象,也就是一个该类型的参数。因为静态成员函数属于类,不属于单个的对象,没有this指针。因此静态成员函数无法直接访问成员数据,只有传入对象,才能通过对象进行调用。说到静态成员函数,当然也有静态成员数据。

静态成员数据不能在类中初始化。该类型属于类,也不属于某个对象。在类体外面用类作用域标识符进行初始化。只有在初始化的时候,当静态数据是私有的时候,可以在类外面访问。

静态成员可以被对象或者通过类作用域调用,当静态成员为私有的时候,只能在成员函数里面调用。

类可以被看做成一个数据结构,相当于一个数据类型,也说明了一个类类型的变量可以作为另外一个类的成员。类还允许一个机制---友元函数和友元类。这个机制虽然给类的封装性造成一定的影响,但是带给类一定的灵活性。

友元函数和友元类可以直接访问类的所有成员。友元这个性质不具有相互性,不具有传递性,也就是说友元类可以访问类的所有成员,但是这个类不能访问这个友元类的私有和保护成员。若A是B的友元类,B是C的友元类,但是A不是C的友元类,不具有传递性。

万物有生有死。类的构造函数和析构函数扮演了对象的创建与毁灭。

构造函数的作用是在对象被创建时为对象的属性初始化或者赋值,构造函数就像世界上的事物一样,被创造不需要自己动手,所以构造函数是自动被调用的。构造函数列表初始化是一种初始化对象属性的一种方式,前面讲的类的嵌套需要对类成员初始化,由于不能直接调用构造函数,所以要通过类的构造函数对类成员进行初始化,就是在构造函数初始化列表 添加  <变量名> (初始化的数据)

析构函数的作用时在对象的生存周期结束后对对象进行一个结束前的一个料理后事似的操做。就比如成员里面有动态数据时,需要对其进行空间释放。

构造函数和析构函数没有返回值,构造函数函数名和类名相同,析构函数类名也是类名,还要在函数名前加 ~ 。析构函数没有参数。构造函数和析构函数不能被继承,这也反映了现实世界的自然规律。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值