C++ C++;是否可由父类访问?
这些规则规定,在公共说明符的情况下,派生类的对象可以被视为基类的对象(反之亦然)。这是什么意思 所有公共元素(在任何类中)都可以被任何地方访问吗 这是否意味着对于父类,派生类可以访问定义为public的属性和方法。但是如果派生类中的属性和方法是公共的,那么父/基类就不能访问它们C++ C++;是否可由父类访问?,c++,class,inheritance,public,C++,Class,Inheritance,Public,这些规则规定,在公共说明符的情况下,派生类的对象可以被视为基类的对象(反之亦然)。这是什么意思 所有公共元素(在任何类中)都可以被任何地方访问吗 这是否意味着对于父类,派生类可以访问定义为public的属性和方法。但是如果派生类中的属性和方法是公共的,那么父/基类就不能访问它们 In a public base class Base class members How inherited base class members appear in derive
In a public base class
Base class members How inherited base class members appear in derived class
private: x ------------------------> x is inaccessible
protected: y ------------------------> protected: y
public: z ------------------------> public: z
但是反过来呢 这意味着如果你有
Bar
,那是Foo
的派生类
class Foo
class Bar : public Foo
所以你可以说,正如预期的那样
Foo* myFoo = new Foo;
Bar* myBar = new Bar;
您还可以从Bar
创建Foo
,因为Bar
是Foo的一种类型
Foo* myOtherFoo = new Bar;
您不能从Foo
生成条
,这就是“派生类的对象可以被视为基类的对象(反之亦然)”的意思
我想正确的问题是:C++中派生类的CAN <强>成员< /强>(不是对象)可以被父类访问吗?
派生类可以访问基类的公共成员和受保护成员(数据成员和函数)
可以从任何地方访问类的公共成员。当然,它们需要通过该类的实例进行访问
但是如果派生类中的属性和方法是公共的,那么父/基类就不能访问它们了
如果您有派生类的实例,则它们可以是。然后可以从基类访问派生类的公共成员
编辑:
基类成员访问派生类的公共成员的示例,反之亦然
class Base
{
public:
void funcBase();
};
class Derived : public Base
{
public:
void funcDerived();
};
void
Base::funcBase()
{
Derived d;
d.funcDerived();
}
void
Derived::funcDerived()
{
Base b;
b.funcBase();
}
int main()
{
Base b;
Derived d;
b.funcBase();
d.funcDerived();
}
你问:
< C++中派生类的对象是否可以被父类访问?
对。下面是我见过几次的模式
你还问:
所有公共元素(在任何类中)都可以被任何地方访问吗
当然可以
基类访问派生类成员的示例模式
实体h:
class Attribute;
class Entity
{
public:
Entity(Attribute* att);
void save(FILE* fp);
void print();
private:
Attribute* att_;
};
属性h:
#include "Entity.h"
class Attribute : public Entity
{
public:
void save(FILE* fp);
void print();
};
Entity.cc:
#include "Entity.h"
#include "Attribute.h" // Needed to access Attribute member functions
Entity::Entity(Attribute* att) : att_(att) {}
void Entity::save(FILE* fp)
{
// Save its own data.
//...
// Save the Attribute
att_->save(fp);
}
void Entity::print()
{
// Print its own data to stdout.
//...
// Print the Attribute
att_->print();
}
如何从父类方法的代码访问子类(非继承的、非虚拟的)成员?如果我有一个类循环
。我举了一个圆圈r的例子例如,code>访问公共属性radius是r.radius
。如果我在我的主要部分中写这个,那么属性必须是公共的。如果我想在派生类中访问相同的radius
,为什么我不能这样做呢。由于该方法/成员是公开的?简单回答是的,他们可以。更好的问题是“他们应该吗?”。事实上,这被认为是闻起来很像一个设计,需要重新思考,除了在一些非常罕见的和专门的情况下,甚至可能不是那样…他们可能不应该。但我试图了解所有适用的规则-可以做什么-因此涵盖了所有场景。这就是为什么我不能确定上面的vise versa语句。所以,如果我理解正确,您不能从Foo访问Bar。因为在本质上,Foo不是酒吧的一种。但我的困惑在于公共变量的情况。如果某个东西是公共的,则可以从main或任何其他随机函数访问它。为什么一个随机函数不能访问来自Foo的条呢?因为它不知道它实际上是一个条。当我说Foo*myOtherFoo=newbar
那么所有公开使用myOtherFoo
的人只知道它是Foo
。它也恰好是一个条
,但没有人知道这一点。对于Bar*myBar=newbar,您只能将其视为Bar
因为这实际上是一个指向条的指针
。你可以从任何地方访问类的状态公共成员。我想知道为什么派生类中的方法不能访问父类的成员。这就是我的困惑所在。他们当然可以。我就是这么说的。下面是一个示例,其中派生类成员访问基类的公共成员,而基类成员访问派生类的公共成员。类基类{public:void funcBase();};派生类:公共基{public:void funcDerived();};void Base::funcBase()。因此基类可以访问派生类中的方法。非常感谢。
#include "Entity.h"
#include "Attribute.h" // Needed to access Attribute member functions
Entity::Entity(Attribute* att) : att_(att) {}
void Entity::save(FILE* fp)
{
// Save its own data.
//...
// Save the Attribute
att_->save(fp);
}
void Entity::print()
{
// Print its own data to stdout.
//...
// Print the Attribute
att_->print();
}