Это может быть глупым вопросом, но как лучше всего программировать 2 класса, которые используют набор переменных?
Мои мысли:
Классы A и B могут наследовать класс C (который содержит переменные x, y)
— Но это создаст экземпляр c для A, B.
— Мне нужен только один экземпляр х и у
Может мне нужен класс друга или статические переменные?
Используйте базовый класс со статическими переменными:
#include <iostream>
struct C
{
static int x;
static int y;
};
struct A : C
{
};
struct B : C
{
};
int C::x = 0;
int C::y = 0;
int main()
{
A a;
a.x = 1;
a.y = 2;
B b;
std::cout << b.x << b.y << '\n';
}
Если вы оказались в ситуации, когда считаете, что вам нужно это сделать, пожалуйста, пересмотрите свой дизайн.
Прежде всего — это зависит. Вы не рассказали нам всю историю. Но вы уже сделали некоторые предположения, которые я хочу отговорить вас сделать.
Тот факт, что А и В совместно используют некоторые общие данные, не означает, что они по сути одинаковы. У человека может быть пункт назначения поездки, и у конференции может быть место встречи, но это не означает, что они должны быть подклассами одного и того же.
Поэтому вполне может быть, что вам следует использовать следующее:
struct C { int x; int y; };
class A {
C& foo;
int bar;
A(C& some_c) : foo(some_c) { }
// ... etc. ...
};
class B {
C& baz;
int qux;
A(C& some_c) : baz(some_c) { }
// ... etc. ...
};
без наследования, без классов друзей, без статических переменных — ничего такого. И это может быть тот случай, когда наследование уместно; опять же, это зависит.
Замечания: Пример, который я привел, не рассматривает потенциальную дивергенцию в области видимости / времени жизни переменных A, B и C. Если есть такое расхождение, возможно, имеет смысл создать все эти объекты в куче и удерживать A и B std::shared_ptr
к C.