首页 > 解决方案 > 如何将数组传递给类?

问题描述

#include <iostream>
#include <string>

using namespace std;

class Term;
class Polynomial;

class Term {
public:
  friend class Polynomial;
  void set_term(string s);
  int get_pow();
  int get_coefficient();

private:
  int coefficient;
  int pow;
};

class Polynomial {
public:
  friend class Term;
  Polynomial(int s, Term t[]);
  int get_size();
  Term *myterm;

private:
  int P_size;
};

void Term::set_term(string s) {
  coefficient = stoi(s.substr(1, 1));
  pow = stoi(s.substr(4, 1));
  if (s[0] == '-') {
    coefficient = -coefficient;
  }
}

int Term::get_coefficient() { return coefficient; }
int Term::get_pow() { return pow; }

Polynomial::Polynomial(int s, Term t[]) {
  P_size = s;
  myterm = new Term[s];
  for (int i = 0; i < s; i++) {
    myterm[i].coefficient = t[i].coefficient;
    cout << i << " Term " << t[i].coefficient << endl;
    cout << i << " Polynomial " << myterm[i].coefficient << endl;
    myterm[i].pow = t[i].pow;
  }
}

Polynomial::get_size() { return P_size; }

int main() {
  string x1;
  cin >> x1;
  int size_x1 = x1.size();

  Term term1[size_x1];

  for (int i = 0; i < size_x1; i += 5) {
    term1[i].set_term(x1.substr(i, 5));
  }

  Polynomial p1(size_x1 / 5, term1);
  for (int i = 0; i < size_x1; i += 5) {
    cout << term1[i].get_coefficient() << "x^";
    cout << term1[i].get_pow() << endl;
  }

  cout << "------------------" << endl;

  for (int i = 0; i < p1.get_size(); i++) {
    if (p1.myterm[i].get_coefficient() > 0)
      cout << "+";

    cout << p1.myterm[i].get_coefficient();
    cout << "x^";
    cout << p1.myterm[i].get_pow() << endl;
  }
  return 0;
}

main 中的 term1 工作正常,但是当我将它传递给 p1(Polynomial) 时,只有 t[0] 并且 myterm[0] 是真的,我的意思是我将 term1 作为 t 传递给 p1 所以 t[0] = term1[0] 和 myterm [0] = t[0]

Polynomial::Polynomial(int s, Term t[]) {
  P_size = s;
  myterm = new Term[s];

  for (int i = 0; i < s; i++) {
    myterm[i].coefficient = t[i].coefficient;
    cout << i << " Term " << t[i].coefficient << endl;
    cout << i << " Polynomial " << myterm[i].coefficient << endl;
    myterm[i].pow = t[i].pow;
  }
}

在多项式构造函数中,t[1].coeffient 和 myterm[1].coefficient 都是 4941660(例如)但是,t 是 term1,在 term1 中 term1[1] 是 4(例如)如果 term1[1] 是 4所以 t[1] 应该是 4,但不是 myterm[1],也不是 4。

标签: c++c++17

解决方案


这里有很多关于尺寸的混淆

string x1;
cin >> x1;
int size_x1 = x1.size();
Term term1[size_x1];

for (int i = 0; i < size_x1; i += 5) {
    term1[i].set_term(x1.substr(i, 5));
}
Polynomial p1(size_x1 / 5, term1);

你没有说你的输入是什么,但假设它等于 10,所以也会有大小 10。然后你的 for 循环将执行两次,"1234567890"等于0 和等于 5,所以你将分配to和to 。这对我来说毫无意义。大小为 10,但分配给的唯一元素是 0 和 5。size_x1term1ii12345term1[0]67890term1[5]term1

然后你使用等于 2 的p1大小创建size_x1/5。所以构造函数 forp1将查看term1[0]and term1[1],但在你分配给term1[0]and的 for 循环中term1[5]

您必须仔细考虑您正在编写的代码实际上在做什么。编译器将完全按照您的指示进行操作。这不像和一个能理解你真正意思的人交谈。所以你必须非常小心。这是我认为你真正的意思(但我可能是错的)

string x1;
cin >> x1;
int size_x1 = x1.size();
int size_term1 = size_x1/5;
Term term1[size_term1];

for (int i = 0; i < size_term1 ; ++i) {
    term1[i].set_term(x1.substr(5*i, 5));
}
Polynomial p1(size_term1, term1);

我创建了一个新变量size_term1,其大小为 term 数组,现在是输入的大小除以 5。我更改了 for 循环,使其分配给term1[0]and term1[1]

所以你的问题与将数组传递给一个类无关,你做得非常正确。它没有清楚地考虑你正在编写的代码,并且在逻辑上犯了错误。


推荐阅读