朋友功能和继承在CPP中
Friend function and Inheritance in cpp
AM新建的CPP。通常,朋友函数可以访问班级的私人和受保护的成员,但是当我尝试在派生的类中使用朋友函数时,请观察魏德行为。
class first
{
int a;
};
class second : public first
{
public:
friend void hai ( second );
};
void hai ( second s )
{
printf("%d",s.a); // It says compilation error
}
void main()
{
second s;
hai(s);
}
如果我做 a to public ,它可以正常工作。
有人可以清理我,如果在基本私有范围中,我为什么不访问它。
问候prasath s。
使场a
受保护,而不是私有。
只能从宣布的类中访问私有字段。
您的错误在这里:
class first
{
int a;
};
类成员的默认值是私人的,因此您无法从派生类访问它。
私人成员只能从同一类访问。线
class second : public first
不会将私人成员更改为公共,因此您可以选择a
受保护/公开,或者在first
中包括公共/受保护的GET/SET功能,该功能将管理a
的访问。
如果在基本的私有范围中,我为什么不访问它。
friend
功能可以访问其朋友的类private
成员。
但是,在这种情况下,基类中的成员a
默认为 private
,因此不继承给儿童类。
公共继承需要protected
或基类的成员由子类继承。因此,要为您的示例工作,您可以使用protected
成员a
class first
{
protected:
int a;
};
first::a
是 class first
中的 private
class second
是从class first
公开派生的,因此:
-
class first
的所有公共成员均在class second
中公开,可以通过class second
的对象访问。 -
class first
的所有受保护成员均受到class second
的保护,无法通过class second
的对象访问。 -
class first
的所有私人成员在class second
中都无法访问,无法通过class second
的对象访问。
因此,您无法通过class second
的对象访问first::a
。
有关更多信息:朋友类对象访问式base类可以在派生类对象上私人成员?
为什么派生的类可以通过指向基础的指针访问其基类的受保护成员?
相关文章:
- .cpp和.h文件中的模板专用化声明
- 继承函数的重载解析
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运算符继承和 cpp 核心准则 c.128 的问题
- 具有虚拟指针和继承的 CPP 类大小
- CPP 继承虚拟方法解析顺序
- CPP继承有些误解
- "Attribute is protected within this context"继承和 .h 和.cpp文件
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- 朋友功能和继承在CPP中
- cpp迭代器继承
- Eclipse报告了有效cpp继承的错误
- CPP 多重继承意外调用 CTOR
- C++ cpp 文件中继承的功能
- .cpp.模板类继承不起作用
- 不能将兄弟方法与虚拟继承 cpp 一起使用
- 继承.h和.cpp文件中的构造函数
- 是否有任何cpp函数或对象(不包括从c继承的)不是线程安全的,即使每个线程对自己的数据进行操作
- CPP继承问题
- cpp 套接字,继承错误