Правильно, просто добавлю,
описанные выше методы позволят вам иметь указатели только на указанные классы.
В своих путешествиях я обнаружил, что функция, которая создает экземпляр класса с указателем на него, также может быть выполнена (изображение кода, фактический код в конце) :
Здесь вы включаете заголовок из класса, который вы «порождаете», чтобы компилятор имел актуальную информацию о нем и, таким образом, мог его создать.
Конечно, это также позволяет вам иметь экземпляр B внутри A (изображение кода, фактический код в конце) :
Возможно, вы также можете подумать о некоторых других вещах kewl, gn.
Код без изображения
Пример 1
хиджры
#pragma once
#include "b.h"
struct A {
char aye, beye, ceye;
B createB(unsigned val);
};
a.cpp
#include "a.h"
B A::createB(unsigned val){
return {69, this};
}
b.h
#pragma once
struct A;
struct B {
unsigned ellel;
A* dad;
B& printOurEllel();
};
b.cpp
#include <stdio.h>
#include "b.h"
B& B::printOurEllel(){
printf("ellel: %d\n", this->ellel);
return *this;
}
основной
#include <stdio.h>
#include "a.h"
#include "b.h"
int main() {
A elgay = { 1, 2, 3 };
printf("%d\n", elgay.createB(69).printOurEllel().dad->beye);
getchar();
}
результат
ellel: 69
2
Пример 2
хиджры
#pragma once
#include "b.h"
struct A {
char aye, beye, ceye;
B yeetos;
};
b.h
#pragma once
struct A;
struct B {
unsigned ellel;
A* dad;
B& printOurEllel();
};
b.cpp
#include <stdio.h>
#include "b.h"
B& B::printOurEllel(){
printf("ellel: %d\n", this->ellel);
return *this;
}
основной :
#include <stdio.h>
#include "a.h"
#include "b.h"
int main() {
A elgay = { 1, 2, 3, {69, &elgay} };
printf("%d\n", elgay.yeetos.printOurEllel().dad->beye);
getchar();
}
результат
ellel: 69
2