C++ 为什么当我从“母亲”类继承时,当访问说明符设置为PRIVATE时,我不能在“孙女”类中创建“母亲”类对象?
若孙女继承的类女儿继承自类母亲,且访问说明符设置为PRIVATE,那个么为什么类母亲不能从类孙女访问?我不能创建对象或指针。为什么?这种行为背后的逻辑是什么?如果我在孙女类中使用母亲对象,会有什么问题?并且,连接到最后一个问题,为什么当访问说明符设置为PUBLIC或PROTECTED时,类女儿继承自类母亲,我可以在孙女类中创建母亲对象?这些问题难道我没有想到吗C++ 为什么当我从“母亲”类继承时,当访问说明符设置为PRIVATE时,我不能在“孙女”类中创建“母亲”类对象?,c++,class,inheritance,C++,Class,Inheritance,若孙女继承的类女儿继承自类母亲,且访问说明符设置为PRIVATE,那个么为什么类母亲不能从类孙女访问?我不能创建对象或指针。为什么?这种行为背后的逻辑是什么?如果我在孙女类中使用母亲对象,会有什么问题?并且,连接到最后一个问题,为什么当访问说明符设置为PUBLIC或PROTECTED时,类女儿继承自类母亲,我可以在孙女类中创建母亲对象?这些问题难道我没有想到吗 #include <iostream> #include <stdio.h> using namespace
#include <iostream>
#include <stdio.h>
using namespace std;
class mother
{
public:
mother(){};
};
class daughter : private mother
{
public:
daughter(){};
};
class granddaughter : public daughter
{
public:
granddaughter(){}; // ERROR
mother* mother; // ERROR
};
int main(void){return 0;}
您可以创建母指针和实例。但是,由于名称解析规则,母亲typename将引用私有基类。为了避免这种情况,可以使用完全限定的类型名::mother将该类型称为非基类型:
class granddaughter : public daughter
{
public:
::mother* mother; // NO ERROR
};
您可以创建母指针和实例。但是,由于名称解析规则,母亲typename将引用私有基类。为了避免这种情况,可以使用完全限定的类型名::mother将该类型称为非基类型:
class granddaughter : public daughter
{
public:
::mother* mother; // NO ERROR
};
因此,当您在课堂上使用“母亲”“孙女”这个名称时,会出现如下错误:
test.cpp:22:9: fatal error: 'mother' is a private member of 'mother'
mother* mother; // ERROR
^
在C++中,可以使用它的类名引用基本对象。编译器将此查找优先于从全局范围查找类。由于该特定基类是私有的,因此会出现错误
要解决此问题,请使用作用域解析运算符::强制编译器从全局作用域进行查找:
class granddaughter : public daughter
{
public:
granddaughter(){};
::mother* mother;
};
因此,当您在课堂上使用“母亲”“孙女”这个名称时,会出现如下错误:
test.cpp:22:9: fatal error: 'mother' is a private member of 'mother'
mother* mother; // ERROR
^
在C++中,可以使用它的类名引用基本对象。编译器将此查找优先于从全局范围查找类。由于该特定基类是私有的,因此会出现错误
要解决此问题,请使用作用域解析运算符::强制编译器从全局作用域进行查找:
class granddaughter : public daughter
{
public:
granddaughter(){};
::mother* mother;
};
这样继承是没有意义的。最好让班上的人互相指指点点。你的这种设置方式让每个孙女都既是女儿又是母亲?对吧?那是个糟糕的课堂设计。母亲、女儿和孙女都是同一类型的人。女儿是孙女的母亲。姐妹们呢?父子关系应该表示为指向母对象和子对象列表的指针。这个问题很有趣,没有人应该真正关心设计,因为设计完美地说明了这个问题。不要看类设计。我知道这不好…就是一个例子。我想了解这种行为,这样继承是没有意义的。最好让班上的人互相指指点点。你的这种设置方式让每个孙女都既是女儿又是母亲?对吧?那是个糟糕的课堂设计。母亲、女儿和孙女都是同一类型的人。女儿是孙女的母亲。姐妹们呢?父子关系应该表示为指向母对象和子对象列表的指针。这个问题很有趣,没有人应该真正关心设计,因为设计完美地说明了这个问题。不要看类设计。我知道这不好…就是一个例子。我想了解这种行为。告诉您的孩子不要按我的方式走。告诉您的孩子不要按我的方式走。您预计会发生什么冲突?我以为我最初收到一个编译错误,因为数据成员名为母亲。然而,再次访问时,我发现我错了。我将更新帖子以反映这一点。谢谢你指出!您预计会发生什么冲突?我想我最初收到一个编译错误,因为数据成员名为mother。然而,再次访问时,我发现我错了。我将更新帖子以反映这一点。谢谢你指出!