面向对象的c ++问题

时间:2010-10-25 01:18:54

标签: c++ oop

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:
      ...
}

现在我做错了什么,因为每当我从Genome对象调用更新计数时,当我调用基因组并加载数据时,字符串seq为空。我该怎么做呢?

在那里,我编辑了修复我的两个错误(我的坏)并满足你的抱怨。从现在开始,我不会在没有实现的情况下包含一个方法,即使我认为它无关紧要。

3 个答案:

答案 0 :(得分:0)

virtual updateCount(seq);

这条线看起来很可疑。您确定您没有为参数和变量使用相同的名称吗?

答案 1 :(得分:0)

嗯,我很想你需要阅读更多关于成员函数的内容。例如,我认为:

virtual updateCount(seq);

应该是:

virtual updateCount(string seq_var);

无论如何,您可以发布您正在获得的错误以及您正在计划的错误吗?

答案 2 :(得分:0)

  1. 您没有初始化thetable
  2. 的构造函数
  3. 非常长的整数文字不是二进制(它是八进制),假设它甚至编译(一目了然,它看起来比大多数平台允许的int大,但没有时间检查)。
  4. 请考虑添加构造函数以便初始化所有成员变量,并用十进制或十六进制数替换整数文字。如下所示,将常量命名为:

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

    我不确定你的魔法常量应该代表什么(上面的例子纯粹是一个例子),并且如上所述给你的常量命名使得它更容易阅读和修复。

    另外,还有一些其他事情要引起你的注意......

    1. 您可能应该将字符串seq传递给Sequence
    2. 的构造函数
    3. Genome::loadData中,您按值传递字符串...通常最好通过const引用传递任何非基本类型(例如const string&),除非您需要复制它(例如分配)。