gpt4 book ai didi

c++ - 在父类中使用 protected 数据,传递给子类

转载 作者:行者123 更新时间:2023-11-30 04:31:14 25 4
gpt4 key购买 nike

当传递到派生类时,如何访问 protected 父类中的数据。

class parent
{
protected:
int a;
};

class child : public parent
{
void addOne(parent * &);
};

void child::addOne(parent * & parentClass)
{
parentClass->a += 1;
}

int main()
{
parent a;
child b;

parent* ap = &a;

b.addOne(ap);
}

最佳答案

您不能通过指向基类的指针/引用来访问 protected 数据。这是为了防止您破坏其他派生类对该数据可能具有的不变量。

class parent
{
void f();
// let's pretend parent has these invariants:
// after f(), a shall be 0
// a shall never be < 0.

protected:
int a;
};

class child : public parent
{
public:
void addOne(parent * &);
};


class stronger_child : public parent
{
public:
stronger_child(int new_a) {
if(new_a > 2) a = 0;
else a = new_a;
}
// this class holds a stronger invariant on a: it's not greater than 2!
// possible functions that depend on this invariant not depicted :)
};

void child::addOne(parent * & parentClass)
{
// parentClass could be another sibling!
parentClass->a += 1;
}

int main()
{
stronger_child a(2);
child b;

parent* ap = &a;

b.addOne(ap); // oops! breaks stronger_child's invariants!
}

关于c++ - 在父类中使用 protected 数据,传递给子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305183/

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