第十二章、类(注意的地方)

第十二章、类(注意的地方)

一、定义和声明:

1、  类就是定义了一个新的类型和新的作用域

2、  一个类可以包含若干个公有的,私有的和受保护的部分。在public部分定义的成员可以被使用该类型的所有代码访问;在private部分定义的成员可被其他类成员访问。

3、  构造函数:是一个特殊的、与类同名的成员函数,用于给每个数据成员设置适当的初始化。如:Sales_item(允许有参数):units_sold0),revenue0.0{ }

构造函数初始化列表由成员名和带括号的初始化值组成,跟在构造函数的形参表后面,并以冒号开头。

4、  成员函数:在类内部,声明成员函数是必须的。而定义成员函数是可选的。

5、  数据抽象和封装:类背后蕴含的基本思想是数据抽象和封装。

数据抽象是一种依赖于接口和师兄分离的变成技术;

封装是一项将低层次的元素组合起来形成新的、高层次实体的技术。类也是一个封装的实体:它代表若干成员的聚集,大多数良好设计的类类型隐藏了实现该类型的成员。

数据抽象和封装有两个优点:

(1)       避免类内部出现无意的、可能破坏队形状态的用户级错误。

(2)       随时间退役可以根据需求改变或缺陷报告来完善类实现,而无需改变用户级代码

6、  将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。

7、  定义对象时,将为其分配存储空间,但是一般在定义类型时不进行分配存储空间。

定义了一个类类型后,可以按以下两种方式使用:

(1)       将类的名字直接用作类型名。

(2)       指定关键字classstruct,后面跟着类的名字。

二、隐含的this指针

1、  this是一个指向非常量Screen的指针,可以通过对this指针解引用来访问this指向的对象。

2、  在普通的非const成员函数中,this的类型时一个指向类类型的const指针。可以改变this所指向对象的值,但不能改变this所保存的地址。在const成员函数中,this的类型时一个指向const类类型对象的const指针。既不能改变this所指向的对象的值,也不能改变this所保存的地址。

3、  可变数据成员:永远都不能为const,甚至当他是const对象的成员也如此。需要将关键字mutable放在成员声明之前: mutable size_t access_ctr;

三、类作用域:两个不同的类具有两个不同的类作用域。

1、  即使两个类具有完全相同的成员列表,他们也是不同的类型。每个类的成员不同于任何其他类的成员。

2、  使用类的成员:在类作用域之外,成员只能通过对象或者制作分别使用成员访问操作符.或者->来访问。

3、  作用域与成员定义:一旦看到成员的完全限定名,就知道该定义是在类作用域中。因为该定义是在类作用域中,所以我们可以直接引用成员revenue,而不用this->revenue

四、构造函数:是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。构造函数的作用就是保证每个对象的数据成员具有合适的初始值。

1、  构造函数的名字与类的名字相同,并且不能指定返回类型。它们可以没有形参,也可以定义多个形参。

2、  构造函数不能声明为const

3、  构造函数初始化式: Sales_item::sales_itemconst string &book):isbnbook),

units_sold0),revenue0.0 { }

构造函数初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。

4、  可以初始化const对象或引用类型的对象,但不能对它们赋值。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。

下面的构造函数是错的:

Class constRef

{

           Public

                    constRefint ii);

           private

                    int i

                    const int ci

                    int &ri

}

constRef::constRefint ii

{

           I = ii  

           Ci = ii          ciconst类型!

           Ri = ii

}

构造函数改为:constRef::constRefint ii: i(ii) ciii), ri ii { }

5、  只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数,当有一个构造函数时,编译器都不会提供默认构造函数。

五、友元:机制允许一个类将对其非公有成的访问权授予指定的函数或类。友元的声明以关键字friend开始。将友元声明成组的放在类定义的开始或结尾时好主意!

1、  友元函数可以再类的内部定义,该函数的作用域扩展到包围该类定义的作用域。

2、  友元引入的类名和函数(声明和定义),可以像预先声明的一样使用:

Class X

{

         Friend class Y

         Friend void F();

}

Class Z

{

         Y*ymen

         Void g() {return ::F() ; }

}

 

六、static类成员:类可以定义类静态成员。Static数据成员独立于该类的任意对象而存在;每个static数据成员是与类关联的对象,并不与该类的对象关联。

1、  static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用费static成员。

2、  使用类的static成员的优点:

(1)       static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名冲突。

(2)       可以实施封装,全局对象不可以。

(3)       容易看出static成员是与特定类关联的,清晰显示程序员的意图。

3、  成员声明前加上关键字static将成员设为staticStatic成员遵循正常的公有、私有访问规则。

4、  像是要其他成员一样,类成员函数可以不用作用操作符来引用类的static成员。

5、  Static数据成员必须在类定义体的外部定义(正好一次)。不想普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时初始化。

Double Acconut::interestRate = initRate();语句定义名为interestRatestatic对象,他是类Account的成员,为double型。

6、  static关键字只能用于类定义体内部的声明中,定义不能标为static

7、  static成员独立于任何对象而存在,不是类类型对象的组成部分。因为static数据成员不是任何对象的组成部分,所以他们的使用方式对于非static书丞而言是不合法的。例如:static数据成员的类型可以是该成员所属的类类型,非static成员被限定声明其自身类对象的指针或引用。

Class Bar

{

Public

           //

Private:

           Static Bar mem1;正确

           Bar *mem2 ;正确

           Bar  mem3;错误!

}

转载于:https://www.cnblogs.com/ss815367696/archive/2012/07/17/2595476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的别。由于各物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分问题:判断图像中的目标属于哪个别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分 基于深度学习的目标检测算法主要分为两大: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的别。由于各物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分问题:判断图像中的目标属于哪个别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分 基于深度学习的目标检测算法主要分为两大: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值