gpt4 book ai didi

c++ - 如何将类(class)的公共(public)成员设为私有(private)?

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:54 25 4
gpt4 key购买 nike

我对编程(一般而言)和 C++(尤其是)是全新的。我正在尝试采用以下公共(public)成员变量并将它们设为私有(private):

int *coeff;
int order;

不幸的是,我看到了以下错误:

“Poly::coeff”:无法访问类“Poly”中声明的私有(private)成员

“Poly::order”:无法访问类“Poly”中声明的私有(private)成员

这是我的代码:

#include "stdafx.h"
#include <iostream>
#include <cstdlib>

using namespace std;

class Poly
{
public:

int *coeff;
int order;

int getData();
int display(int *coeff, int order);
void addition(Poly P1, Poly P2);
void subtraction (Poly P1, Poly P2);
void multiplication (Poly P1, Poly P2);

// ~Poly();
};

int Poly::display(int *coeff, int order)
{
int i;
int j;
for (i = order; i >= 0; i--)
{
cout << coeff[i] << "x^" << i;
if ((i - 1) != -1)
{
cout << "+";
}
}
cout << "\n";
return 0;
}

int Poly::getData()
{
int i;
cout << "Please enter the order of the polynomial: ";
cin >> order;
coeff = new int[order + 1];
for (i = order; i >= 0; i--)
{
cout << "Please enter the coefficient of x^" << i << " :";
cin >> coeff[i];
}
return 0;
}

void Poly::addition(Poly P1, Poly P2)
{
int max;
int i;
max = (P1.order > P2.order) ? P1.order : P2.order;
int *add = new int[max + 1];

if (P1.order == P2.order)
{
for (i = P1.order; i >= 0; i--)
{
add[i] = P1.coeff[i] + P2.coeff[i];
}
}

if (P1.order > P2.order)
{
for (i = P1.order; i > P2.order; i--)
{
add[i] = P1.coeff[i];
}
for (i = P2.order; i >= 0; i--)
{
add[i] = P1.coeff[i] + P2.coeff[i];
}
}

if (P1.order < P2.order)
{
for (i = P2.order; i > P1.order; i--)
{
add[i] = P2.coeff[i];
}
for (i = P1.order; i >= 0; i--)
{
add[i] = P1.coeff[i] + P2.coeff[i];
}
}
cout << "\nAddition:";
display(add, max);
cout << "\n";
}

void Poly::subtraction(Poly P1, Poly P2)
{
int max;
int i;
max = (P1.order > P2.order) ? P1.order : P2.order;
int *sub = new int[max + 1];

if (P1.order == P2.order)
{
for (i = P1.order; i >= 0; i--)
{
sub[i] = P1.coeff[i] - P2.coeff[i];
}
}

if (P1.order > P2.order)
{
for (i = P1.order; i > P2.order; i--)
{
sub[i] = P1.coeff[i];
}
for (i = P2.order; i >= 0; i--)
{
sub[i] = P1.coeff[i] - P2.coeff[i];
}
}

if (P1.order < P2.order)
{
for (i = P2.order; i > P1.order; i--)
{
sub[i] = -P2.coeff[i];
}
for (i = P1.order; i >= 0; i--)
{
sub[i] = P1.coeff[i] - P2.coeff[i];
}
}
cout << "\nSubtraction:";
display(sub, max);
cout << "\n";
}

void Poly::multiplication(Poly P1, Poly P2)
{
int i;
int j;
int max;

max = P1.order + P2.order;
int *mult = new int[max + 1];

for (i = P1.order; i >= 0; i--)
for (j = P2.order; j >= 0; j--)
{
mult[i + j] += P1.coeff[i] * P2.coeff[i];
}
cout << "\nMultiplication:";
display(mult, max);
}



int main()
{
int choice;
Poly P1, P2, P3;
cout << "-------- Instructions --------" << endl;

cout << "For polynomial 1... " << endl;
P1.getData();

cout << endl;

cout << "For polynomial 2... " << endl;
P2.getData();

while (1)
{
cout << "\n******** Menu Selection ********" << endl;
cout << "1: Addition\n2: Subtraction\n3: Mutiplication\n0: Exit" << endl;
cout << "Please enter your choice (1, 2, 3 or 0):";
cin >> choice;

switch (choice)
{
case 1:
cout << "\n-------- Addition --------\n";
cout << "Polynomial 1: ";
P1.display(P1.coeff, P1.order);
cout << "Polynomial 2: ";
P2.display(P2.coeff, P2.order);
P3.addition(P1, P2);
cout << "--------------------------\n";
break;

case 2:
cout << "\n------ Subtraction ------\n";
cout << "Polynomial 1: ";
P1.display(P1.coeff, P1.order);
cout << "Polynomial 2: ";
P2.display(P2.coeff, P2.order);
P3.subtraction(P1, P2);
cout << "--------------------------\n";
break;

case 3:
cout << "\n------ Subtraction ------\n";
cout << "Polynomial 1: ";
P1.display(P1.coeff, P1.order);
cout << "Polynomial 2: ";
P2.display(P2.coeff, P2.order);
P3.multiplication(P1, P2);
cout << "--------------------------\n";
break;

case 0:
cout << "The program will now terminate. Thank you." << endl;
exit(0);

default:
cout << endl;
cout << "You have entered an invalid selection." << endl;
cout << "Please enter a positive integer between 0 and 3.";
cout << endl;
}
}

return 0;
}

谁能提供有关如何最好地修改我的代码以使 int *coeff 和 int order 成为私有(private)成员的指导?

非常感谢。-瑞安

最佳答案

制作东西的想法private意味着您被允许访问成员以外的人或friend函数(这就是 private 的目的)。代码在 main 中失败在类似 P1.display(P1.coeff, P1.order) 的地方因为main不是 Poly 的成员类,因此,不允许访问 Poly::coeffPoly::order (正如编译器告诉您的那样)。

我建议您更改 Poly::display(int *coeff, int order) 的定义不需要你传递 coefforder ,因为实例已经知道这些值是什么。我也会取出 return 0 ,因为它不会给你买任何东西。

void Poly::display()
{
int i;
int j;
for (i = order; i >= 0; i--)
{
cout << coeff[i] << "x^" << i;
if ((i - 1) != -1)
{
cout << "+";
}
}
cout << "\n";
}

在该成员函数内部,变量 ordercoeff正在隐式地挑选您的类(class)成员,这些成员以前被您传递的参数隐藏

关于c++ - 如何将类(class)的公共(public)成员设为私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com