gpt4 book ai didi

c++ - 当作为参数传递时,为什么不能在子类函数中访问 protected 父类(super class)成员?

转载 作者:IT老高 更新时间:2023-10-28 23:01:25 26 4
gpt4 key购买 nike

我收到一个编译错误,对此我有些困惑。这是在 VS2003 上。

错误 C2248:“A::y”:无法访问在“A”类中声明的 protected 成员

class A
{
public:
A() : x(0), y(0) {}
protected:
int x;
int y;
};

class B : public A
{
public:
B() : A(), z(0) {}
B(const A& item) : A(), z(1) { x = item.y;}
private:
int z;
};

问题在于 x = item.y;

访问被指定为 protected 。为什么B类的构造函数不能访问A::y?

最佳答案

因为这个:

class base_class
{
protected:
virtual void foo() { std::cout << "base::foo()" << std::endl; }
};

class A : public base_class
{
protected:
virtual void foo() { std::cout << "A::foo()" << std::endl; }
};

class B : public base_class
{
protected:
virtual void foo() { std::cout << "B::foo()" << std::endl; }

public:
void bar(base_class *b) { b->foo(); }
};

如果这是合法的,你可以这样做:

A a;
B b;
b.bar(&a);

你会从 B 调用 A 的 protected 成员,这是不允许的。

关于c++ - 当作为参数传递时,为什么不能在子类函数中访问 protected 父类(super class)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557950/

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