数组、构造函数和实例
arrays, constructors and instances
我解释我的问题:我正在尝试解决一个数组问题,我在OOP中完成了一个程序,其中它有一个名为lights的类。我想要做的是做一个内部有引脚编号的数组,并将它们设置为输出。我做了一个引脚一个引脚,这很容易做到,但现在我想用一个 for 循环和一个数组来做我不知道如何构建一个构造函数和处理它,其中包含一个带有数组的引脚编号。
//----------------------------------------------------------------------------------
class lights{
int pins[5]; //array for 5 elements
int i;
public:
lights(int ledPins[]){
for(i=0; i<5; i++){ //pins are set up as output
pinMode(pins[i],OUTPUT);
}
}//end constructor
void attempt(){ //metodo para pobrar si se enciende los leds
for(i=0; i<5; i++){
digitalWrite(pins[i],HIGH);
Serial.println(pins[i]);
}
}//end attempt
};//end class
//---------------------------------------------------------------------------------------------------------------------
int MyPins[] = {5,6,7,8,9}; //I declare what it is inside
lights lit(MyPins); //I create an objet with my array as parameters
void setup(){
Serial.begin(9600);
}
void loop(){
lit.attempt();
}
你不需要把所有东西都放到一个类中。 我认为使用灯光类是矫枉过正的。
根据我的经验,函数用于处理光引脚,它们都需要引脚枚举。
除非您有大量的引脚要设置,否则循环可能不值得。 展开循环可能会提高程序效率:
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
初始化通常只发生一次,因此通常不需要优化。
如果需要使用类,我建议使用一个对单个光源进行建模的类。
每个灯都有一个关联的引脚。
你可以有一个光源容器(例如数组(:
class Light
{
public:
Light(unsigned int pin)
: m_pin(pin),
m_is_on(false)
{ ; }
void initialize(); // Sets up the appropriate pin
void on(); // Turns on the light
void off(); // Turns off the light
void blink(unsigned int rate, unsigned int duration);
private:
unsigned int m_pin;
bool m_is_on;
};
Light display[] = {Light(5), Light(6), Light(7), Light(8), Light(9)};
const unsigned int light_quantity =
sizeof(display) / sizeof(display[0]);
此模型的一个优点是,您的程序可以在灯光方面,而不必担心引脚。
您的代码不起作用,因为您只是在编写代码,但没有先制定算法来设计应用程序......
花点时间看看你写的软件是什么...您正在向构造函数传递一个数组,但是您在哪里使用该信息? 无处。。。
lights(int ledPins[]){
for(i=0; i<5; i++){ //pins are set up as output
pinMode(pins[i],OUTPUT);
}
}//end constructor
您将引脚设置为输出 Arduino {0 to 4}
而不是像您想象的那样{5 to 9}
,之后环路方法只是设置为可能甚至没有 LEds 的高电平引脚:)
(顺便说一下,您应该在那里使用睡眠和播放打开 LED 关闭,以便您可以看到它们如何闪烁(
我解决了这个问题:只缺少两行。我纠正了真正的构造函数
public:
lights(int ledPins[]){
for(i=0; i<5; i++){
pines[i] = ledPines[i];
for(i=0; i<5; i++){ //pins are set up as output
pinMode(pins[i],OUTPUT);
}
}//end constructor
相关文章:
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- C++初始化类实例时隐式调用类成员的构造函数
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 常量正确性/缺少支持常量和非常量实例的类的常量构造函数
- C++ - 使用另一个类的构造函数实例化一个对象
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++如何在类构造函数中实例化 std::array?
- 避免通过操作从私有构造函数间接实例化
- 类构造函数 - 没有构造函数的实例
- 没有构造函数模型的实例::模型匹配参数列表
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C++:如何在结构中定义类实例.类具有参数化的构造函数
- 在保证复制的世界中构造函数实例化
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- C++构造函数的实例都与参数列表匹配
- 为什么GCC将对全局实例构造函数的调用放在不同的部分(取决于目标)
- 如果使单一实例构造函数受到保护,缺点是什么 - 继承 - C++11.