C++ 派生类如何访问基类的这个私有数据成员?
我在一个名为bankAccount的基类中有一个名为balance的私有数据成员。我希望我的派生类checkingAccount能够使用balance,所以我对它进行了保护,但我注意到,我的派生类似乎仍然能够访问balance,即使它被放在基类的私有部分。我以为这是不可能的?有人知道穆伊特在干什么吗 基类:C++ 派生类如何访问基类的这个私有数据成员?,c++,class,inheritance,C++,Class,Inheritance,我在一个名为bankAccount的基类中有一个名为balance的私有数据成员。我希望我的派生类checkingAccount能够使用balance,所以我对它进行了保护,但我注意到,我的派生类似乎仍然能够访问balance,即使它被放在基类的私有部分。我以为这是不可能的?有人知道穆伊特在干什么吗 基类: class bankAccount { public: bankAccount(); void setAccountInfo(int
class bankAccount
{
public:
bankAccount();
void setAccountInfo(int accountNumTemp, double balanceTemp);
void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j);
private:
int accountNumber;
double balance;
};
class checkingAccount: public bankAccount
{
public:
checkingAccount();
double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance);
private:
float interestRate;
int minimumBalance;
float serviceCharge;
};
void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j)
{
int c;
c = j;
checkingAccount ca;
balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance);
}
double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance)
{
if (transactionTypeTemp == 'D')
{
balance = balance + amountTemp;
}
else if (transactionTypeTemp == 'W')
{
if (balance < amountTemp)
{
cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl;
}
else
{
balance = balance - amountTemp;
if(balance < minimumBalance) //if last transaction brought the balance below minimum balance
{
balance = (balance - serviceCharge); //apply service charge
}
}
}
return balance;
}
派生类:
class bankAccount
{
public:
bankAccount();
void setAccountInfo(int accountNumTemp, double balanceTemp);
void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j);
private:
int accountNumber;
double balance;
};
class checkingAccount: public bankAccount
{
public:
checkingAccount();
double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance);
private:
float interestRate;
int minimumBalance;
float serviceCharge;
};
void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j)
{
int c;
c = j;
checkingAccount ca;
balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance);
}
double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance)
{
if (transactionTypeTemp == 'D')
{
balance = balance + amountTemp;
}
else if (transactionTypeTemp == 'W')
{
if (balance < amountTemp)
{
cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl;
}
else
{
balance = balance - amountTemp;
if(balance < minimumBalance) //if last transaction brought the balance below minimum balance
{
balance = (balance - serviceCharge); //apply service charge
}
}
}
return balance;
}
派生类函数成员接收相关数据成员的基类函数成员:
class bankAccount
{
public:
bankAccount();
void setAccountInfo(int accountNumTemp, double balanceTemp);
void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j);
private:
int accountNumber;
double balance;
};
class checkingAccount: public bankAccount
{
public:
checkingAccount();
double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance);
private:
float interestRate;
int minimumBalance;
float serviceCharge;
};
void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j)
{
int c;
c = j;
checkingAccount ca;
balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance);
}
double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance)
{
if (transactionTypeTemp == 'D')
{
balance = balance + amountTemp;
}
else if (transactionTypeTemp == 'W')
{
if (balance < amountTemp)
{
cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl;
}
else
{
balance = balance - amountTemp;
if(balance < minimumBalance) //if last transaction brought the balance below minimum balance
{
balance = (balance - serviceCharge); //apply service charge
}
}
}
return balance;
}
使用基类的私有数据成员的派生类函数成员:
class bankAccount
{
public:
bankAccount();
void setAccountInfo(int accountNumTemp, double balanceTemp);
void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j);
private:
int accountNumber;
double balance;
};
class checkingAccount: public bankAccount
{
public:
checkingAccount();
double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance);
private:
float interestRate;
int minimumBalance;
float serviceCharge;
};
void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j)
{
int c;
c = j;
checkingAccount ca;
balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance);
}
double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance)
{
if (transactionTypeTemp == 'D')
{
balance = balance + amountTemp;
}
else if (transactionTypeTemp == 'W')
{
if (balance < amountTemp)
{
cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl;
}
else
{
balance = balance - amountTemp;
if(balance < minimumBalance) //if last transaction brought the balance below minimum balance
{
balance = (balance - serviceCharge); //apply service charge
}
}
}
return balance;
}
double checkingAccount::applyTransaction(char transactionTypeTemp、int-amountTemp、int-c、双倍余额)
{
如果(transactionTypeTemp=='D')
{
余额=余额+金额温度;
}
else if(transactionTypeTemp=='W')
{
如果(余额<金额温度)
{
coutbalance
在该上下文中是函数的第四个参数(checkingAccount::applyTransaction
);它不是bankAccount
balance
的数据成员在该上下文中是函数的第四个参数(checkingAccount::applyTransaction
);它不是bankAccount
checkingAccount::applyTransaction
的数据成员,它没有看到或接触基类的余额
成员。它正在使用、重置和返回自己的余额
参数。checkingAccount::applyTransaction
没有看到或接触基类的balance
成员。它正在使用、重置并返回自己的balance
参数。不要从没有虚拟析构函数的基类派生。请。哦,请不要在实际应用程序中将金融数据存储为浮点值。舍入错误肯定会蒸发或产生金钱。不要从基类派生类,该类没有虚拟析构函数。请。哦,请不要在实际应用程序中将金融数据存储为浮点值。舍入错误肯定会蒸发或产生货币。这也是我最初计算的结果。但是,我的输出表明,执行了某些操作的派生函数中的余额值它与基类的值相同balance@Matt您在完成applyTransaction后更新私有成员变量余额,因此一旦完成,它当然会保持不变。您是说它在applyTransaction期间会发生变化吗?我是说新余额的值与旧余额的值相同。新余额的值不应该是吗如果没有初始化,新的平衡就是内存中的任何东西?这也是我最初计算的,但是,我的输出表明,在派生函数中,对其执行一些操作的平衡值与基类的值相同balance@Matt在完成applyTransacti后,您正在更新私有成员变量余额开,所以一旦结束,它当然会是一样的。你是说它在applyTransaction期间会发生变化吗?我是说新平衡的值与旧平衡的值相同。如果新平衡没有初始化,它的值不应该是内存中的值吗?这也是我一开始计算的,但是,我的输出表明对派生函数执行某些操作的派生函数中的平衡值与基类的值相同balance@Matt:当您通过指向银行账户的指针/引用调用checkingAccount
上的applyTransaction
?那么我想问题是,新余额是如何获得a值的“这是旧的余额吗?”马特:请回答我的问题,因为如果你按照我所描述的那样做,解决方案很简单。嗯,不确定。我主要调用bankAccounts applytransaction,然后在bankAccounts apply transaction内部调用checkingAccounts applytransaction。这也是我最初计算的结果。然而,我的输出表明对其执行某些操作的派生函数中的平衡e与基类的值相同balance@Matt:您通过指向银行账户的指针/引用调用checkingAccount
上的applyTransaction
?因此,我想问题是,新余额如何获得作为ol的值d balance?@Matt:请回答我的问题,因为如果你按照我描述的做,解决方案很简单。嗯,不确定。我主要调用bankAccounts applytransaction,然后在bankAccounts apply transaction的内部调用checkingAccounts applytransaction。