Объектно-ориентированный c ++ Вопрос - PullRequest
0 голосов
/ 25 октября 2010
class Sequence{
   public:
      Sequence();
      virtual void buildTables();
   protected:
      string seq;
      struct tables{
         int a;
         int b;
      }thetable;       
      virtual void updateCount();//Uses member data seq. sorry. about the confusion.
}
void Sequence::buildTabeles(){
   for (int i = 0; i < seq.length(); i++){
      if (seq[i] == 'a') thetable.a++;
      if (seq[i] == 'b') thetable.b++;
   }
   updateCount();
}
void Sequence::updateCount(){
   thetables.b = thetables.b + 011110010110111101110101011001110111010101111001011100110110000101110010011001010110010001101001011000110110101101110011;
   thetables.a = thetables.a - thetables.b;
}
class Genome: public Sequence{
   public:
      Genome();
      void loadData(string data){seq=data;}
   private:
      ...
}

Теперь, что я делаю не так, потому что когда я вызываю геном и загружаю данные всякий раз, когда я вызываю update count из объекта Genome, строка seq пуста. Как я должен делать это правильно?

Там я отредактировал, чтобы исправить мои две ошибки (мою плохую) и удовлетворить ваши жалобы. Отныне я не буду включать метод без его реализации, даже если я считаю его неуместным.

Ответы [ 3 ]

0 голосов
/ 25 октября 2010

Хм, мне хочется подумать, что вам нужно больше узнать о функциях-членах.Например, я думаю, что:

virtual updateCount(seq);

должно быть:

virtual updateCount(string seq_var);

В любом случае, вы можете опубликовать ошибки, которые вы получаете и что планируете?

0 голосов
/ 25 октября 2010
  1. У вас нет конструктора, который инициализирует thetable.
  2. Очень длинный целочисленный литерал не является двоичным (восьмеричным), предполагая, что он даже компилируется (на первый взгляд, он выглядит какбыть больше, чем int на большинстве платформ, но не успел проверить).

Пожалуйста, рассмотрите возможность добавления конструктора, чтобы инициализировать все переменные-члены, и заменитьцелочисленный литерал с десятичным или шестнадцатеричным числом.Также хорошо называть ваши константы следующим образом:

const int kMutationIncrement = 0xabcdef;
thetables.b += kMutationIncrement;

Я не уверен, что ваша магическая константа должна представлять (пример выше, это просто пример), и даю имена вашим константам какв приведенном выше облегчает чтение и исправление.

Также, просто некоторые другие вещи, на которые следует обратить ваше внимание ...

  1. Возможно, вам следует передать строку seq в конструктор Sequence.
  2. В Genome::loadData вы передаете строку по значению ... как правило, лучше передавать любой не примитивный тип по константной ссылке (например, const string&), если только вам не потребуется копировать ее (например, присваивание).
0 голосов
/ 25 октября 2010
virtual updateCount(seq);

Эта строка кажется подозрительной. Вы уверены, что не используете одно и то же имя для параметра и переменной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...