【发布时间】:2014-01-13 05:15:58
【问题描述】:
我知道私有和受保护的定义,以及它们的区别。但是,当我继续与他们一起测试每种不同的场景时,我并没有得到一致/预期的行为。这是让我感到困惑的段落(来自 21 天内自学 C++ :))
总共存在三个访问说明符:public、protected 和 私人的。如果一个函数有你的类的一个对象,它可以访问所有 公共成员数据和功能。反过来,成员函数, 可以访问自己类的所有私有数据成员和函数 以及任何类的所有受保护数据成员和函数 他们推导出来。
为了具体一点,我写了一段代码来看看(代码在问题语句的下方): 1- 如果Frisky 和Boots,Cat 类的两个实例,可以看到彼此的私有数据。通过“看到”,我的意思是拥有将另一只猫作为其参数并能够设置/获取其私有数据的成员函数。声称他们应该是,我可以确认。
2- 与“看到”的含义相同,猫“Frisky”中的成员函数可以将哺乳动物的实例(例如“人类”)作为参数,并设置/获取其受保护的数据吗?我从上面的声明中了解到应该是的,但是代码不会编译。它抱怨它受到保护。
如果我理解错了,上一段的实际含义是什么?任何帮助表示赞赏,谢谢!
using namespace std;
class Mammal
{
public:
int myNumFeet;
void setMyNumVertebras(int);
protected:
int myNumVertebras;
};
class Cat : public Mammal
{
public:
void tellHisAge(Cat);
void tellHisNumVertebras(Mammal);
void setMyAge(int);
private:
int myAge;
int myWeight;
};
int main()
{
Cat Frisky;
Frisky.setMyAge(3);
Frisky.setMyNumVertebras(23);
Cat Boots;
Boots.setMyAge(4);
Boots.setMyNumVertebras(23);
Mammal Human;
Human.setMyNumVertebras(33);
Frisky.tellHisAge(Boots);
Frisky.tellHisNumVertebras(Human);
return 0;
}
void Cat::tellHisAge(Cat Boots)
{
cout << Boots.myAge <<endl;
}
void Cat::setMyAge(int age)
{
myAge = age;
}
void Mammal::setMyNumVertebras(int num)
{
myNumVertebras = num;
}
void Cat::tellHisNumVertebras(Mammal Human)
{
cout<< myNumVertebras <<endl;
}
【问题讨论】: