abstract类中不可以有private的成员_C++ 类:声明成员函数与实现

c5eb55d7babf457ddfdbaf2057dbce01.png

接上文...

16.3类的成员

2.成员函数

1、构造函数

...

2、拷贝构造函数

有了类的构造函数我们就可以创建类的实例了,下图中分别使用不同的构造函数一共创建了4个动物的对象,现在程序中就有4个活蹦乱跳的小动物了。

d88f7a2a2e7cde72b768c247c8606e42.png

假如如果你特别喜欢而想有一个和seven一模一样的小动物可以吗?下图中的一行代码可以帮你做到。

ef69adcb78ce767a590740d1d7d5acd1.png

上图第91行smallAni04_copy就是一个新创建的动物,它与叫做seven的动物完全相同。那么创建这个新动物对象使用了哪个构造函数呢?这一次的创建并没有使用前面写的构造函数,而是使用到一个系统为Animal类添加的函数:拷贝构造函数,或称为复制构造函数。在我们没写的情况下系统会为这个类自动添加这个函数,但我们自己也可以在Animal类中写这个函数。

b92e1ddd6611bb479f529ddf02d9d298.png

首先要在类中声明这个拷贝构造函数,你会注意到这个函数的参数有些特点:参数的类型是Animal类型,说明参数是一个动物类的对象,参数类型后面的&表示传递的参数是一个引用,const表明这个参数是一个常量,函数体中不能修改参数。

3、属性函数

前面我们定义在类中的数据成员——属性,描述了这个类的所有对象共同的特征,而给属性一个值却是发生在构造函数创建实例对象时。由于类的属性访问权限被私有了(private:),类的外部是没有任何办法直接访问属性数据的。程序运行中一些类的对象常常有必要与这个类的对象交换数据,那就需要这个类来提供一些属性访问的“官方通道”,允许类的部分属性能被外部对象访问。

类要提供属性访问通道,就需要定义一些“属性函数”。

6e53cdadc3dd49de421d9d6a759efaa2.png

上图中类声明了读取这个类的name、color和height属性的get..()函数,其中color和height属性还可以通过set..(...)函数来修改这个属性的数值。属性函数的实现如下图所示:

071b796a96b139721c86895c43f3fa53.png

属性函数提供了外界与类进行数据通信的接口,类的哪些属性的值可以被读取,哪些属性的值可以被修改,取决于类的设计者。

另外,如果类中的函数(比如属性函数)只是用来读取属性的数据而没有修改属性的值,就像上面的get...()函数,那么可以把这个函数声明为const函数。

9224ed619a2d5ac94267bad9271efb4a.png

如果函数被const标记后,编译器会检查函数体中是否有修改类的属性的代码,c++编程标准推荐将类中的函数尽可能的声明为const。

4、析构函数

在程序中每次通过类的构造函数创建一个类对象都要消耗一定的内存,消耗的大小取决于类中数据成员的数量和类型。当程序中不再需要一个对象时,可以把这个对象从内存中清除掉,这个工作可以由写在类中的析构函数完成。在定义一个类时,开发者可以在类中声明一个析构函数。

10b4de37020d7046be60cbe2b2b43ff6.png

析构函数的调用是由系统完成的,开发者无需自己编写调用代码。如果类中没有写析构函数,系统在编译类时会自动添加一个。

5、功能函数

上面介绍的几种类函数,在类中有特定的作用,实现了类的一些基本功能。开发者在程序中定义一个类的更重要的目的是让这个类的对象在程序逻辑中能够完成一些特殊的使命,比如一个学生类的对象可以写作业、吃饭、做游戏,一个笔记本电脑类的对象可以播放音乐、视频、运行程序等等。

我们把写在类里,让类对象可以执行的、有趣的功能称为类的功能函数,比如可以在这个动物类中定义让动物吃饭、玩耍、学习、洗澡的函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值