我有这段代码,注意两行被注释掉了
#include <iostream>
class foo {
public:
foo();
int i;
};
class bar: foo {
public:
bar();
//int i;
};
foo::foo()
{
i = 2;
}
bar::bar()
{
i = 4;
}
int main()
{
bar *b = new(bar);
//std::cout << "bi = " << b->i << std::endl; /*line 28*/
foo *f = (foo*) b;
std::cout << "fi = " << f->i << std::endl;
}
注释掉这两行后,代码编译,输出为
fi = 4
取消注释这两行,代码编译并输出
bi = 4
fi = 2
只有类 bar 中的 i 声明被注释掉编译失败
var.cc: In function ‘int main()’:
var.cc:6:7: error: ‘int foo::i’ is inaccessible
var.cc:28:30: error: within this context
前两种情况我理解,但我不理解这个编译错误。为什么是
变量“i”可从 bar 构造函数访问,但不能从 bar 指针访问?
最佳答案
在私有(private)继承中,基类的所有成员变为private
派生类的成员。请注意,对于类,默认继承是 private
当您未指定任何内容时。
自 i
充当private
bar
的成员, 它可以在 bar::bar()
中访问但不能来自成员函数之外。
好读:
What are access specifiers? Should I inherit with private, protected or public?
关于c++ - 成员变量继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497953/