gpt4 book ai didi

c++ - 注意事项 "protected versus private"

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:48 24 4
gpt4 key购买 nike

<分区>

我知道 private 和 protected 的定义,以及它们的区别。然而,当我继续和他们一起玩来测试每一个不同的场景时,我并没有得到一致/预期的行为。这是让我感到困惑的段落(来自 21 天自学 C++ :))

In total, three access specifiers exist: public, protected, and private. If a function has an object of your class, it can access all the public member data and functions. The member functions, in turn, can access all private data members and functions of their own class and all protected data members and functions of any class from which they derive.

说的更具体一点,我写了个代码看看(代码在问题语句下面):1- 如果 Cat 类的两个实例 Frisky 和 ​​Boots 可以看到彼此的私有(private)数据。通过“看到”,我的意思是让成员函数将另一只猫作为其参数并能够设置/获取其私有(private)数据。声明是他们应该的,我可以证实。

2- 与“看”的含义相同,猫“Frisky”中的成员函数是否可以将哺乳动物的实例(比如“人类”)作为参数,并设置/获取其 protected 数据?我从上面的声明中了解到是的,但是代码无法编译。它提示它受到保护。

如果我理解错了,那么上面这段话的实际含义是什么?感谢任何帮助,谢谢!

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

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