c++ - 如何将数组传递给类?
问题描述
#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。
解决方案
这里有很多关于尺寸的混淆
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_x1
term1
i
i
12345
term1[0]
67890
term1[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]
。
所以你的问题与将数组传递给一个类无关,你做得非常正确。它没有清楚地考虑你正在编写的代码,并且在逻辑上犯了错误。
推荐阅读
- sql - 如何使用一串值“搜索”其列包含所述值的记录
- angular - 当内部有 switchMap 运算符时,角激活路由 paramMap 不会取消订阅
- c++ - 该标准是否会阻止在可变参数模板中使用足够小的文字值缩小文字转换的范围
- javascript - 为什么我的响应总是 http 400 状态码
- git - 通过 SSH 隧道使用 Gitlab
- python - 如何绘制具有 20 分钟时间和 8 毫秒间隔的随机数组图?
- c++11 - 模板函数采用指向具有 const& 和按值实现的成员函数的通用指针
- python - 无法使用 subprocess.call 函数打开带有“.lnk”扩展名的程序
- python - Softmax 给出了奇怪的结果
- javascript - setState 仅在使用对象作为状态时设置最后一个输入