是否有可能从调用如果主要是私有的方法? 如果不是,它怎么会是可能的?(Is it possibl

2019-08-02 23:06发布

我试图让这个程序开始运行,但目前我得到的错误。 我不知道如何得到这个工作。 如果我改变类SavingsAccount公众应该没关系,但我必须保持原样。

问题是,在主函数。

#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;
    }

有什么建议?

Answer 1:

那么在默认情况下成员函数是私有的,所以你可以随时将它们添加到公共如下:

class SavingsAccount
{
    private:
    int accountType;
    string ownerName;
    long ssn;
public:
    double accountClosurePenaltyPercent, accountBalance;
    void Information();
    inline double AccountClosureLoss()
    {
        return (accountBalance * accountClosurePenaltyPercent);
    }
    void OutputInformation();
};

现在,您就可以从主给他们打电话。



Answer 2:

既然你不能改变SavingsAccount类,由于它禁止它的成员访问( private是默认的),你不应该使用这个类的任何会员专区。

“问题是在主函数”:不,这是你的类的设计。 什么也没有公开发行A类是没有用的。

有没有干净的解决您的问题。

上改变类将是在限定“接口”,并且使(不变)类的边界线的溶液继承该接口:

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(); 


Answer 3:

你试图用你的方法内部成员属性,但你想用你的方法,而一个实例。 所有成员属性的值存储在您的实例里面,所以你首先需要一个实例。 将它添加到您的主要功能:

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;
};

您不能使用方法没有一个实例。 即使你能(静态也许?),你不能使用它们内部的任何成员的属性,所以它会是没用的,它包括进级。



Answer 4:

你必须首先声明SavingsAccount类的一个实例。 例如:

int main()
{
    SavingsAccount account;
    account.Information();

    ...

    return 0;
}

此外,没错,就是你要调用的类的方法必须是公开的。



文章来源: Is it possible to call a method from main if it is private? If not, how would it be possible?