random — получает одно и то же значение и не может получить доступ к функции в цикле for, просто один раз в переполнении стека

Это основной класс.

int main()
{

Handler1 handler_1;
Handler2 handler_2;
Handler3 handler_3;
Handler4 handler_4;

handler_1.add(&handler_2);
handler_1.add(&handler_3);
handler_1.add(&handler_4);
//handler_4.setNext(&handler_1);

for (int i = 1; i < 20; i++)
{
//srand(time(0));

Proxy* px = Proxy::getInstance(4);
Proxy* newProxy = px->checkvalue();

if(newProxy!=0)
{
handler_1.handle(newProxy->getvalue());
cout << "    =====< " << i << " access>" <<endl;
}
else
{
cout << "\n=====Access is higher than 10, program exit=====" << endl;
return 0;
}

cout << '\n';
}

}
,
Это часть класса Proxy, который является частным подклассом (singleton) из класса Generator.

Proxy::Proxy(int inputbits):Generator(inputbits)
{
}

Proxy::~Proxy()
{

}

int Proxy::getvalue()
{
return getBits();
}

Proxy* Proxy::checkvalue()
{
counter++;
//int value = getBits();
if(counter>10)
return 0;
else
return this;
}

Generator * Proxy::operator ->()
{
counter++;

if(counter<=10)
return rPointer;
else
return 0;
}

Proxy* Proxy::instance = 0;

Proxy* Proxy::getInstance(int inputbits)
{
if(instance==0)
{
cout << "here" << endl;
instance = new Proxy(inputbits);

}

return instance;

}

.
Это часть класса Generator, который является базовым классом класса Proxy.

Generator::Generator(int inputbits):bits(inputbits)
{
srand(time(NULL));
bits=rand() % int(pow(2, inputbits));
cout << bits << endl;
}

Generator::~Generator()
{

}

int Generator::getBits()
{
return bits;
}

.

This is sample out in main function.

H1 passed 11 H2 passed 11 H3 passed 11 H4 handled 11     =====< 1 access>

H1 passed 11 H2 passed 11 H3 passed 11 H4 handled 11     =====< 2 access>

H1 passed 11 H2 passed 11 H3 passed 11 H4 handled 11     =====< 3 access>

H1 passed 11 H2 passed 11 H3 passed 11 H4 handled 11     =====< 4 access>

H1 passed 11 H2 passed 11 H3 passed 11 H4 handled 11     =====< 5 access>

Как вы можете видеть выше, я получаю такое же значение, как 11 здесь,
но я ожидал, что я хочу получить случайное значение, которое генерируется в конструкторе генератора. Но из того, что я попробовал, я понял цикл for в основном, я положил на пример кода, это Proxy* px = Proxy::getInstance(4); хотя я включил этот код в цикл for, он просто идет один раз. Чтобы объяснить мою логику, чтобы получить числа, сгенерированные случайным образом, сначала создайте экземпляр класса Proxy и вызовите getInstance (), а затем значение, которое здесь равно 4, перейдите в конструктор Generator, и я могу получить некоторое значение из функции getvalue в классе Proxy. Но я обнаружил, что в конструкторе Generator генерируется только одно значение.
Извините за мои неупорядоченные записи. И наконец, вопрос: как я могу генерировать случайные числа здесь ..? (как войти в функцию для цикла, как Proxy* px = Proxy::getInstance(4); в основной функции)

отредактированный
Весь код—

#include "Base.h"
void Base::setNext(Base *n)
{
next = n;
}

void Base::add(Base *n)
{
if(next)
next->add(n);
else
next = n;
}

void Base::handle(int i)
{
next->handle(i);
}

#include "Handler1.h"#include "Base.h"#include <iostream>
#include <stdlib.h>

using namespace std;

void Handler1::handle(int i)
{
if(i>2)
{
cout << "H1 passed " << i << " ";
Base::handle(i);
}
else
cout << "H1 handled " << i << " ";
}

#include "Handler2.h"#include "Base.h"#include <iostream>
#include <stdlib.h>

using namespace std;

void Handler2::handle(int i)
{
if(i>4)
{
cout << "H2 passed " << i << " ";
Base::handle(i);
}
else
cout << "H2 handled " << i << " ";
}

#include "Handler3.h"#include "Base.h"#include <iostream>
#include <stdlib.h>

using namespace std;

void Handler3::handle(int i)
{
if(i>6)
{
cout << "H3 passed " << i << " ";
Base::handle(i);
}
else
cout << "H3 handled " << i << " ";
}

#include "Handler4.h"#include "Base.h"#include <iostream>
#include <stdlib.h>

using namespace std;

void Handler4::handle(int i)
{
cout << "H4 handled " << i << " ";
}

#ifndef BASE_H
#define BASE_Hclass Base
{
Base *next;

public:
Base(): next(0) {};
void setNext(Base*);
void add(Base*);
virtual void handle(int);

private:
};

#endif // BASE_H

#ifndef HANDLER1_H
#define HANDLER1_H
#include "Base.h"
class Handler1: public Base
{
public:
void handle(int);
};

#endif // HANDLER1_H

#ifndef HANDLER2_H
#define HANDLER2_H
#include "Base.h"
class Handler2: public Base
{
public:
void handle(int);
};#endif // HANDLER2_H

#ifndef HANDLER3_H
#define HANDLER3_H
#include "Base.h"
class Handler3: public Base
{
public:
void handle(int);
};#endif // HANDLER3_H#ifndef HANDLER4_H
#define HANDLER4_H
#include "Base.h"
class Handler4: public Base
{
public:
void handle(int);
};#endif // HANDLER4_H#include "Generator.h"#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

Generator::Generator(int inputbits):bits(inputbits)
{
srand(time(NULL));
bits=rand() % int(pow(2, inputbits));
cout << bits << endl;
}

Generator::~Generator()
{

}

int Generator::getBits()
{
return bits;
}

#ifndef GENERATOR_H
#define GENERATOR_Hclass Generator
{
public:
Generator(int);
~Generator();
int getBits();

private:
int bits;
unsigned long int sequence;
};

#endif // GENERATOR_H#include "Generator.h"#include "Proxy.h"#include <iostream>

using namespace std;Proxy::Proxy(int inputbits):Generator(inputbits)
{
}

Proxy::~Proxy()
{

}

int Proxy::getvalue()
{
return getBits();
}

Proxy* Proxy::checkvalue()
{
counter++;
//int value = getBits();
if(counter>10)
return 0;
else
return this;
}

Generator * Proxy::operator ->()
{
counter++;

if(counter<=10)
return rPointer;
else
return 0;
}

Proxy* Proxy::instance = 0;

Proxy* Proxy::getInstance(int inputbits)
{
if(instance==0)
{
cout << "here" << endl;
instance = new Proxy(inputbits);

}

return instance;

}#ifndef PROXY_H
#define PROXY_H
#include "Generator.h"
class Proxy: private Generator
{
public:
~Proxy();
static Proxy* getInstance(int);
Generator * operator ->();
Proxy* checkvalue();
int getvalue();
private:
Proxy();
Proxy(int);
int bits;
int counter;
static Proxy* instance;
Generator * rPointer;
};

#endif // GENERATORPROXY_H#include <iostream>
#include "Generator.h"#include "Base.h"#include "Proxy.h"#include <stdlib.h>
#include <time.h>
#include "Handler1.h"#include "Handler2.h"#include "Handler3.h"#include "Handler4.h"
using namespace std;

int main()
{Handler1 handler_1;
Handler2 handler_2;
Handler3 handler_3;
Handler4 handler_4;

handler_1.add(&handler_2);
handler_1.add(&handler_3);
handler_1.add(&handler_4);
//handler_4.setNext(&handler_1);

for (int i = 1; i < 20; i++)
{
//srand(time(0));
cout<< "kiyayaya" <<endl;
Proxy* px = Proxy::getInstance(4);
cout<< "yogiyo" <<endl;
Proxy* newProxy = px->checkvalue();
cout<< "success" <<endl;
if(newProxy!=0)
{
handler_1.handle(newProxy->getvalue());
cout << "    =====< " << i << " access>" <<endl;
}
else
{
cout << "\n=====Access is higher than 10, program exit=====" << endl;
return 0;
}

cout << '\n';
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]