C++ 访问姐妹类的实例
我正在尝试创建一个包含三个类作为成员的结构,为了实现我的想法,我希望我的类的实例能够访问一个结构中的姐妹实例。假设在初始化结构之后,我希望我的自定义类能够调用初始化的姐妹自定义类的方法。甚至有可能做到吗?这是我的头文件:C++ 访问姐妹类的实例,c++,C++,我正在尝试创建一个包含三个类作为成员的结构,为了实现我的想法,我希望我的类的实例能够访问一个结构中的姐妹实例。假设在初始化结构之后,我希望我的自定义类能够调用初始化的姐妹自定义类的方法。甚至有可能做到吗?这是我的头文件: struct custom_wrapper { public: custom_wrapper(); class custom_class_one { private: int number1; public:
struct custom_wrapper
{
public:
custom_wrapper();
class custom_class_one
{
private:
int number1;
public:
int getNumber1();
};
class custom_class_two
{
private:
int number2;
public:
int getNumber2();
};
class custom_class_three
{
private:
int number3;
public:
int getNumber3();
};
}) 只要您的方法是可访问的,并且类可以在需要时看到彼此,就可以这样做:
struct custom_wrapper
{
public:
custom_wrapper();
class custom_class_two; // Forward declaration for inner class
class custom_class_one
{
private:
int number1;
public:
int getNumber1();
int accessSisterMethods(custom_class_two& obj) {
return obj.getNumber2();
}
};
class custom_class_two
{
private:
int number2;
public:
int getNumber2() {
return 42;
}
};
class custom_class_three
{
private:
int number3;
public:
int getNumber3();
};
};
int main()
{
custom_wrapper::custom_class_one obj1;
custom_wrapper::custom_class_two obj2; // Need a sister object
std::cout << obj1.accessSisterMethods(obj2);
}
当然,除非调用静态方法,否则您需要另一个姐妹类的实例,但我正在考虑您发布的代码。根据您的评论,我认为您在这里混淆了几个概念:组合、嵌套类和实例。或者我误解了你的问题,将删除/编辑我的答案 当你说一个结构中的姐妹实例时,我认为你真的在寻找构图。就像在一段有爱的关系中。不需要嵌套类就可以进行合成。对于组合,您需要成员变量 也许你真正想要的是这样的,如果我错了,请纠正我:
struct CustomClassA {
private:
int number;
public:
int getNumber() { return number; }
};
struct CustomClassB {
private:
int number;
public:
int getNumber() { return number; }
};
struct CustomClassC {
private:
int number;
public:
int getNumber() { return number; }
};
struct CustomWrapper {
private:
CustomClassA a;
CustomClassB b;
CustomClassC c;
};
所以,若您创建一个CustomWrapper实例,它就有自定义类a、b和c的实例。它拥有它们
然后您希望这三个自定义类能够相互通信。实现这一目标的方法有很多。自定义类可以有指向其他姐妹类的指针。这些可以在CustomWrapper的构造函数中设置:
或者自定义类可以有一个指向自定义包装器的指针,并通过包装器与它们的姐妹进行通信。您没有显示足够的代码来演示如何使用内部类。类是一种类型,需要对实例调用非静态方法。你的冒险意识在哪里?试试看。看看它是否有效。如果你认为应该有效的东西不起作用,请在这里详细询问。如果你认为不可行的东西,那么,再次询问细节。BTW,C++有成员函数。在某些不适用于您的示例的情况下,它们可以获得CS理论方法的大部分语义。我在从父构造函数调用子构造函数时遇到问题,我想在创建父构造函数时初始化所有三个子构造函数。为什么自定义类的声明是,自定义类和自定义类嵌套在自定义包装中?除了他们的名字之外,custom_class_one、custom_class_II和custom_class_three之间有什么区别吗?当你说一个结构中的姐妹实例时,你是在谈论组合,即has-a关系,因为我在你的问题中看不到组合。在某些情况下,可能还需要使用线外函数定义。谢谢,这仍然不清楚,但至少我对该做什么有一个模糊的想法!你们也可以发布如何在父构造函数中调用子构造函数吗;
#include <iostream>
struct CustomClassB; // Forward declaration for member pointer in CustomClassA.
struct CustomClassA {
private:
int number;
CustomClassB* b; // Member pointer to CustomClassB.
public:
CustomClassA() : number(1), b(nullptr) {} // Initialized sister b to nullptr.
void setSisterB(CustomClassB *sister_b) { b = sister_b; }
int getNumber() { return number; }
};
struct CustomClassB {
private:
int number;
CustomClassA* a;
public:
CustomClassB() : number(2), a(nullptr) {}
void setSisterA(CustomClassA *sister_a) { a = sister_a; }
int getNumber() {
if (a) // Check a is not null
return a->getNumber() + number; // Use pointer to sister a
return number;
}
};
struct CustomClassC {
private:
int number;
CustomClassA* a;
CustomClassB* b;
public:
CustomClassC() : number(4), a(nullptr), b(nullptr) {}
void setSisterA(CustomClassA* sister_a) { a = sister_a; }
void setSisterB(CustomClassB* sister_b) { b = sister_b; }
int getNumber() { return number; }
};
struct CustomWrapper {
private:
CustomClassA a;
CustomClassB b;
CustomClassC c;
public:
CustomWrapper() {
a.setSisterB(&b); // Set the pointers to the sister custom
b.setSisterA(&a); // classes in each custom class in the
c.setSisterA(&a); // constructor of CustomWrapper.
c.setSisterB(&b);
}
int getAnswer() {
return b.getNumber() + c.getNumber();
}
};
int main() {
CustomWrapper wrapper;
std::cout << wrapper.getAnswer();
}