C++ 访问数据成员的继承成员函数

C++ 访问数据成员的继承成员函数,c++,inheritance,member-functions,datamember,C++,Inheritance,Member Functions,Datamember,考虑下面的示例代码: #include <iostream> using namespace std; class A { private: static int a; int b; protected: public: A() : b(0) {} void modify() { a++; b++; }

考虑下面的示例代码:

#include <iostream>

using namespace std;

class A
{
    private:
        static int a;
        int b;

    protected:

    public:

        A() : b(0) {}

        void modify()
        {
            a++;
            b++;
        }

        void display()
        {
            cout << a <<"\n";
            cout << b <<"\n";
        }

};

int A::a=0;

class B : public A {

    private:
        int b;

    public:
        B(): b(5)
        {
        }

};

int main()
{
    A ob1;
    B ob2;
    ob1.display();
    ob2.display();

    return 0;

}
#包括
使用名称空间std;
甲级
{
私人:
静态int a;
int b;
受保护的:
公众:
A():b(0){}
void modify()
{
a++;
b++;
}
无效显示()
{

cout它将访问
A::b
。类
A
中的
display
方法实现根本不知道
b::b
的存在,更不用说使用它了。出于所有的意图和目的,
b::b
A::b
是分开的。只有在
b
本身的范围内,名称冲突才会产生
b
参考
b::b
,隐藏
A::b
。成员变量不能是
虚拟的
,它将访问
A::b
A
中的
显示
方法实现对
b::b
的存在没有任何线索,更不用说使用了。出于所有目的,
b::b
A::b
分开。仅在
b
本身的范围内,名称冲突使
b
引用
b::b
,隐藏
A::b
。成员变量不能是
虚拟的
它是class
A
A::display()
无法访问B个私有成员。

这是class
A
A::display()
无法访问B个私有成员。

ob2.display()
将访问派生类成员。
成员函数调用总是在
this
上求值,
this->display()
如果
this
指向基类的对象,那么
display()
函数中对
b
的任何引用都被求值为基类的
this->b

这是因为基类的
display()
基类的方法

void B::display()
{
    //cout << a <<"\n";
    cout << b <<"\n";
    A::display();    
}
void B::display()
{
//cout
ob2.display()
将访问派生类成员。
成员函数调用总是在
this
上求值,
this->display()
如果
this
指向基类的对象,那么
display()
函数中对
b
的任何引用都被求值为基类的
this->b

这是因为基类的
display()
基类的方法

void B::display()
{
    //cout << a <<"\n";
    cout << b <<"\n";
    A::display();    
}
void B::display()
{

//库特:那么
class B
继承
class A的
display()
函数有什么用呢
class B
class A
继承了
display()
函数,所以我期望
display()
要访问
类B的B
@LinuxPenseur有很多用途。这并不是其中之一。要实现您想要的功能,您既不能引入新变量并通过基构造函数调用初始化基类
B
,也不能在基类中引入一个
虚拟
方法,该方法返回
的值>b
在基类中,并重写它以返回派生类中的
b
的值。或者在派生类中有一个方法,该方法访问派生类成员,并通过调用访问基类成员的基类方法进一步传播调用。谢谢:
类b
继承
clas有什么用s A的
display()
函数。
B类
继承了A类
的函数
display()
,因此我期望
display()
要访问
类B的B
@LinuxPenseur有很多用途。这并不是其中之一。要实现您想要的功能,您既不能引入新变量并通过基构造函数调用初始化基类
B
,也不能在基类中引入一个
虚拟
方法,该方法返回
的值>b
在基类中,并重写它以返回派生类中的
b
的值。或者在派生类中有一个方法,该方法访问派生类成员,并通过调用访问基类成员的基类方法进一步传播调用。请注意,显示函数在类a中,以防错过它。你能根据它重新表述你的答案吗。我这样说是因为ob2.display似乎没有访问派生类成员。现在我有一个疑问:)。为什么
这个
指针在
ob2.display()
指向基类的对象?ob2是派生类的对象。@LinuxPenseur:Becasue
display()
是基类的成员。对
display()的调用
是在基类
A
的范围内解析的。基类对可能从它派生的任何其他类一无所知,如果你想一想,没有这种反向依赖是有道理的。派生类中的
b
只有在派生类的范围内才会被引用。请注意,显示函数是在类A中,以防您错过了它。您能否根据它重新表述您的答案。我这样说是因为ob2.display似乎无法访问派生类成员。现在我有一个疑问:)。在
ob2.display()的情况下,为什么
这个
指针指向基类的对象?ob2是der的对象