это первый раз, когда я сделал что-то подобное, поэтому я немного уверен, как мне это нужно. У меня есть очень простой класс, который содержит некоторые простые значения и некоторые методы получения:Возвращая указатель на класс внутри класса
class Nucleotide{
private:
char Base;
int Position;
int Polymorphic;
public:
Nucleotide(char ch, int pos);
int getPos();
char getBase();
int getPoly();
};
Этот класс присутствует в другом классе, который содержит вектор из них:
class NucleotideSequence{
private:
std::string Name;
std::vector<Nucleotide> Sequence;
public:
NucleotideSequence(std::string name, std::vector<Nucleotide> seq);
std::string getName();
Nucleotide getBase(int pos1);
};
Я хочу, чтобы метод второго класс, называемый getBase, чтобы иметь возможность взять целое число - скажем 1 и вернуть первый нуклеотидный объект в вектор. То, что я написал ниже:
Nucleotide NucleotideSequence::getBase(int pos1)
{
for(std::vector<Nucleotide>::iterator i = Sequence.begin(); i != Sequence.end(); i++)
{
if(pos1 == (*i).getPos())
{
return i; // Return a pointer to the correct base.
}
}
}
Я получил нуклеотид в виде возвращаемого типа, но мне было интересно, на самом деле, как я должен изменить это - так, если я вернусь нуклеотид из-за проход по значению будет не только возврат копия объекта в этом месте в векторе? Поэтому я бы скорее вернул указатель/ссылку. Я использую итератор в цикле, так что я должен просто вернуть указатель со значением итератора? Как мне это сделать? В функции я возвращаю i, но должен ли я возвращать i &? Я не уверен в специфике - предположительно, если я возвращаю указатель, мой тип возврата должен быть нуклеотидом * или, возможно, нуклеотидом &, так как & означает адрес? Я думал об этом и читал Cpp, но я все еще не уверен в правильном ответе.
Thanks, Ben.
Не можете просто использовать 'Sequence [Pos1]' в некотором роде? – Bernhard