c++ - C++中无继承的“CLASS C”访问“CLASS A”函数
问题描述
这是 UML 的样子CLASS UML
ClassA 有一个指向 ClassB 的指针,而 ClassB 有一个指向 ClassC 的指针。我想知道是否可以在不继承 ClassA 的情况下访问 ClassC 中 ClassA 的函数。
解决方案
问:我想知道我是否可以在不继承 ClassA 的情况下在 ClassC 中访问 ClassA 的函数。
A:是的,可以在 ClassC 中访问 ClassA 的功能。通过调用 classA 的静态成员函数或通过向 ClassC 提供 classA 的特定实例。看起来可以通过反向跟踪指针(ClassC 到 ClassB 到 ClassA)来访问 classA,但这是不可能的。指针仅指向一个方向的值。
这是一个关于类和类(对象)实例之间差异的有趣问题。下面的例子说明了为什么没有 classA::callAnyMethod():
#include <iostream>
class B;
class C;
class A
{
public:
A(B *next, int value) : next_(next), value_(value) { }
void af1() const { std::cout << value_ << "\n"; }
static void af2() { std::cout << staticValue << "\n"; }
protected:
B *next_;
int value_;
static int staticValue;
};
int A::staticValue = 3;
class B
{
public:
B(C *next) : next_(next) { }
protected:
C *next_;
};
class C
{
public:
void cf1(const A &a) { a.af1(); }
void cf2() { A::af2(); }
};
int main()
{
C c;
B b(&c);
A a1(&b, 1);
A a2(&b, 2);
// a1 is first instance of class A.
// One 'A::value_' is defined in a1 and is equal to 1.
c.cf1(a1);
// a2 is second instance of class A.
// Second 'A::value_' is defined in a2 and is equal to 2.
c.cf1(a2);
// Without specific instance of class A, we can use only static member
// 'A::staticValue' which is defined at file scope and is equal to 3.
// 'A::staticValue' is not part of objects (instances) of class A.
c.cf2();
return 0;
}
推荐阅读
- python-3.x - 在列表中选择独特的组合
- javascript - firebase 身份验证状态持久性如何在电子应用程序中工作?
- vb.net - 如何在 Visual Basic 中将 Shell 命令输出到 RichTextBox
- sql - Spark,无法创建带有分区的表,但没有分区有效
- python - Python 3.7:使用数据类模块初始化对象?
- asp.net - 角度“资产”文件夹的 IIS URL 重写失败
- php - 对于 CakePHP 3 中的路由,是否有比我的示例更好的正则表达式模式?
- excel - 当自动触发公式时,如何更改我的 Worksheet_Change 代码以更改单元格的值
- angular - 无法在 Angular 中解析流
- spring-boot - RabbitMQ 队列管理