我想让这个程序开始运行,但目前我只是得到错误。我不知道如何让它发挥作用。如果我将类SavingsAccount更改为public它应该没问题,但我需要保持原样。
问题在于主要功能。
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class SavingsAccount
{
int accountType;
string ownerName;
long ssn;
double accountClosurePenaltyPercent, accountBalance;
void Information();
inline double AccountClosureLoss()
{
return (accountBalance * accountClosurePenaltyPercent);
}
void OutputInformation();
};
void SavingsAccount::Information()
{
cout << "Enter Account Type (1 for Checking or 2 for Savings): ";
cin >> accountType;
cout << "Enter owner name: ";
getline(cin, ownerName);
cout << "Enter the Social Security Number: ";
cin >> ssn;
cout << "Enter the percent penalty for closing account(decimal form): ";
cin >> accountClosurePenaltyPercent;
cout << "Enter the account balance: ";
cin >> accountBalance;
}
void SavingsAccount::OutputInformation()
{
cout << "Account Type: " << endl;
cout << "Name: " << ownerName << endl;
cout << "SSN: " << ssn << endl;
cout << "Account Closure Penaly %: " << accountClosurePenaltyPercent << endl;
cout << "Account Balance: " << accountBalance;
}
int main(void)
{
SavingsAccount.Information();
SavingsAccount.AccountClosureLoss();
SavingsAccount.OutputInformation();
return 0;
}
到目前为止我尝试了什么。
int main(void)
{
SavingsAccount John;
John.Information();
John.AccountClosureLoss();
John.OutputInformation();
return 0;
}
有什么建议吗?
答案 0 :(得分:3)
默认情况下,成员函数是私有的,因此您可以随时将它们添加到公共中:
class SavingsAccount
{
private:
int accountType;
string ownerName;
long ssn;
public:
double accountClosurePenaltyPercent, accountBalance;
void Information();
inline double AccountClosureLoss()
{
return (accountBalance * accountClosurePenaltyPercent);
}
void OutputInformation();
};
您现在可以从主电话中呼叫它们了。
答案 1 :(得分:1)
由于您无法更改SavingsAccount类,并且由于它禁止访问它的成员(private
是默认值),因此您不应该使用该类的任何类型。
“问题在于主要功能”:不,它属于你班级的设计。没有公开的课程没有用。
您的问题没有干净的解决方案。
更改类的边界线上的解决方案是定义“接口”,并使(未更改的)类继承该接口:
class Account {
public:
virtual ~Account(){}
virtual void Information() = 0;
virtual double AccountClosureLoss() = 0;
virtual void OutputInformation() = 0;
};
class SavingsAccout : public Account {
... body remains unchanged
};
main
将使用Account
iso SavingsAccount
:
SavingsAccount savingsAccount;
Account& account = savingsAccount;
// should be accessible via the `Account` interface.
account.AccountClosureLoss();
答案 2 :(得分:1)
您尝试在方法中使用成员属性,但是您尝试在没有实例的情况下使用您的方法。所有成员属性的值都存储在您的实例中,因此您首先需要一个实例。将其添加到主函数中:
int main(void)
{
SavingsAccount myAccount;
myAccount.Information();
myAccount.AccountClosureLoss();
myAccount.OutputInformation();
return 0;
}
此外,您的方法被定义为私有方式,您应始终使用public:
和private:
,如下所示:
class SavingsAccount
{
public:
void Information();
inline double AccountClosureLoss()
{
return (accountBalance * accountClosurePenaltyPercent);
}
void OutputInformation();
private:
int accountType;
string ownerName;
long ssn;
double accountClosurePenaltyPercent;
double accountBalance;
};
如果没有实例,则无法使用方法。即使你可以(静态可能吗?)你也不能在其中使用任何成员属性,所以把它包含在课堂中是没用的。
答案 3 :(得分:0)
您必须先声明SavingsAccount类的实例。例如:
int main()
{
SavingsAccount account;
account.Information();
...
return 0;
}
此外,是的,您要调用的类的方法必须是公共的。