初始化类的两种方法?

     2023-02-22     295

关键词:

【中文标题】初始化类的两种方法?【英文标题】:Two ways of initializing a class? 【发布时间】:2020-05-28 15:39:20 【问题描述】:

我有一些关于类的概念问题,我想确保我以正确的方式做事。

我正在使用 Arduino 编程并为我的项目使用一些库。 库实现了一个我可以在我的项目中实例化的类。

例如,AdafruitMotorShieldV2 库实现了 Adafruit_MotorShield 类,并在示例中将该类实例化为一个名为 AFMS 的变量。到目前为止一切都清楚了

#include <Adafruit_MotorShield.h>

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

但是我想出了其他库,例如 DeadReckoner,在示例中,该类被实例化为:

#include <DeadReckoner.h>
DeadReckoner deadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);

这里我不确定发生了什么。

DeadReckoner(大写字母)是类的名称,当然也是构造器的名称。我假设 deadReckoner(下划线)是实例化 DeadReckoner 的变量,但为什么调用与 Adafruit 库中的不同?

换句话说:这两个调用是否等效?

DeadReckoner deadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);
DeadReckoner deadReckoner = DeadReckoner(&leftTicks, &rightTicks, TICKS_PER_REV, RADIUS, LENGTH);

如果需要,这是 DeadReckoner.h 中的相关代码

class DeadReckoner 

public:
    DeadReckoner(volatile unsigned long *, volatile unsigned long *, unsigned long, unsigned long, int, double, double);
    // other methods of the class

【问题讨论】:

【参考方案1】:

首先您应该将标签从 C 更改为 C++

第一个是 DeadReckoner 承包商,它接收一些参考作为参数。

第二个是 DeadReckoner 分配算子,接收 DeadReckoner 承包商的结果。 查看 h 文件,您会发现与此类似的签名: DeadReckoner & DeadReckoner :: operator= ( const DeadReckoner & )

这两行的结果是一样的,但是第一行是一个 DeadReckoner 对象。 而第二个创建一个 DeadReckoner 对象,使用赋值运算符将其复制到另一个 DeadReckoner 对象。

【讨论】:

Copy initialization

java中类加载的两种方法是啥?

...)、实例对象.class(属性)、实例对象getClass()。在连接和初始化阶段,其实静态变量经过了两次赋值:第一次是静态变量类型的默认值;第二次是我们真正赋给静态变量的值。Java对类的使用分为两种方式:主动使用和被动使用。... 查看详情

初始化arraylist的两种方法

方式一:  ArrayList<String>list=newArrayList<String>();Stringstr01=String("str01");Stringstr02=String("str02");list.add(str01);list.add(str02);方式二:ArrayList<String>list=newArra 查看详情

初始化arraylist的两种方法[转]

方式一: ArrayList<String>list=newArrayList<String>(); Stringstr01=String("str01"); Stringstr02=String("str02"); list.add(str01); list.add(str02);方式二:  Array 查看详情

ExtJS 3:创建自定义类的两种方式:有啥区别?

】ExtJS3:创建自定义类的两种方式:有啥区别?【英文标题】:ExtJS3:Twowaysofcreatingcustomclass:what\'sthedifference?ExtJS3:创建自定义类的两种方式:有什么区别?【发布时间】:2010-11-0720:11:13【问题描述】:我正在尝试学习ExtJS和一般... 查看详情

idea查看继承关系或其图表的两种方法

...一个类,然后按Ctrl+H,可以快速查看当前所选类的继承关系,如下图:第一种方法:能帮我们进行筛选,如上图所示一排按钮,从左往右分别是看当前类的父类和子类、查看当前类的父类、查看当前... 查看详情

创建线程的两种方法

创建线程的两种方法:  1、继承Thread类,并重写Thread类的run方法  2、实现接口Runnable的run方法。  注意:另外还有一种创建线程的方法笔者没有指出,使用线程池方式—Callable接口。Callable接口实现类,call方法可抛出异常、... 查看详情

无头链表的两种实现方法(代码片段)

...新的节点。1.1创建结构体structNode intData; structNode*next;;1.2初始化新的节点structNode*CreateNode(intdata) structNode*NewNode=(structNode*)malloc(s 查看详情

使用idea当中的快捷键快速查看继承关系或其图表的两种方法

...dea当中选中一个类,然后按Ctrl+H,可以快速查看当前所选类的继承关系,如下图:?同样选中一个类,按CTRL+ALT+U,即可生成当前类的继承关系图,如下图:?二、二者的区别上述两种方法都能帮我们快速查看类之间的层次关系。?... 查看详情

java创建线程的两种方法

...态(Runnable)1.通过扩展Thread类来创建线程(1)定义Thread类的子类,并重写该类 查看详情

java中多线程的两种创建方式(代码片段)

...Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象,调用start()方法启动。//线程创建方式一:/*第一步:继承Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象,调用start()方法启动。*/publiccl... 查看详情

1-多线程的两种实现方式(代码片段)

...cvoidmain(String[]args)//方式一/*MyThreadmt=newMyThread();//创建Thread类的子类对象mt.start();//5.开启线程*///方法二myRunnablemr=newmyRunnable();//4.创建Runnable子类对象//Runnable对象没有start方法,所以将Runnable对象当做参数,通过Thread类的构造方法Thre... 查看详情

创建类的两种方式

1、直接创建fromdjango.formsimportModelFormclassTestModelForm(ModelForm):classMeta:model=self.model_class#表所对应的类fields="__all__"  2、通过“type”创建fromdjango.formsimportModelFormmeta=type(‘Meta‘,(object,),{‘mode 查看详情

类的两种定义

#classFoo(object):#def__init__(self,name):#self.name=name###f=Foo("alex")#print(type(f))#print(type(Foo))deffunc(self):print(‘hello%s‘%self.name)def__init__(self,name,age):self.name=nameself.age=ageFo 查看详情

uiimage加载本地图片的两种方式

UIImage加载图片方式一般有两种:(1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存... 查看详情

html基于类的视图中的两种形式(代码片段)

查看详情

属性的两种定义方式

装饰器方式:在类的普通方法上应用@property装饰器经典类,具有一种@property装饰器(如上一步实例)################定义###############classGoods:@propertydefprice(self):return"wupeiqi"################调用###############obj=Goods()result=obj.price# 查看详情

安卓批量上传图片到七牛的两种方法

...key的时候遇到过这个问题。创建一个工具类QiNiuUploadUtil,初始化七牛的上传工具类UploadManager然后创建回调接口QiNiuUploadCompletionHandler因为本项目图片多选都用PictureSelector选择器所提上传图片数组类型为LocalMedia,这个根据自己项目... 查看详情

javascript创建类的两种常用方式

构造函数方式:a.代码:varmyClass=function(name){this.name=name}myClass.prototype.sex="male"varmyClass=newmyClass(‘lee‘)myClass.sex="female"console.log(myClass.name)console.log(myClass.sex)b.输出:leefemale工厂函数方式(推 查看详情