Можно ли использовать функцию в классе для изменения значения переменной в другом классе c ++. Я хочу использовать класс manger для изменения цены в классе событий или цены в функции.
#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdio>
#include <sstream>
using namespace std;
class Manager {
public:
void Changevalue() {
//Changes the value of a variable some where in events class.
}
};
class Event {
//variable
void price() {
int price;
}
};
int main() {
Manager a;
Event b;
a.Changevalue();// use to change the value of a variable in the events class
return 0;
}
6 ответов
Я делаю несколько предположений о том, что вы пытаетесь сделать, исходя из текущей структуры вашего кода. Например, я предполагаю, что вы хотите установить переменные объектов, а не классов, потому что вы объявили объекты.
#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdio>
#include <sstream>
using namespace std;
class Event {
int price;
public:
void setPrice(int p) {
price = p;
}
};
class Manager {
Event *event;
public:
Manager(Event * e) : event(e) {}
void ChangeValue() {
//Changes the value of a variable some where in events class.
event->setPrice(5);
}
};
int main() {
Event b;
Manager a(&b);
a.ChangeValue();// use to change the value of a variable in the events class
return 0;
}
Скорее всего, вы можете передать событие функции ChangeValue в качестве аргумента. Затем вы можете использовать любые методы получения или установки, которые предоставляет класс.
Вы можете добавить диспетчер классов в качестве друга класса к событию класса. Просто добавьте участника в событие класса:
class Event
{
public:
friend class Manager;
int price;
void price()
{
}
Но цена также должна быть членом классового события, иначе вы не сможете изменить значение переменной в функции. Потому что это локальная переменная.
Пусть Manager
принимает Event
в качестве аргумента:
Event e;
Manager m(e);
Затем добавьте функцию-член в Event
, которую Manager
может вызывать для изменения своего значения.
В: Можно ли использовать функцию в классе для изменения значения переменной в другом классе?
A: Конечно. Есть много способов. Например:
1) Вы можете просто сделать "price" публичным членом "Event" - так что любой может изменить его в любое время. Обычно это плохо ...
2) Вы можете сделать Manager.ChangeValue () другом Event:
http://www.cprogramming.com/tutorial/friends.html
3) Или, что лучше всего, вы можете создать метод получения / установки в «Событии».
ПРЕДОСТЕРЕЖЕНИЕ:
// Questionable
class Event {
public:
void price() {
int myPrice; // The scope of this variable exists *ONLY INSIDE THE FUNCTION*
}
};
// Better
class Event
private:
int price;
public:
int getPrice() { return price; }
void setPrice (int p) { price = p; }
Да.
Если переменная в классе
Event
равнаpublic static
, вы можете получить к ней прямой доступvoid Changevalue() { Event::someVar = someValue; }
Если это не
static
, аpublic
, вам понадобится объектEvent
, значение которого вы изменитеvoid Changevalue(Event& evt) { evt.someVar = someValue; }
Если это не
static
илиpublic
, вам понадобится объектEvent
и методpublic
вEvent
, с помощью которого вы измените значениеvoid Changevalue(Event& evt) { evt.ChangeSomeValue( someValue); //this is the best approach in OOP world }
Где будет класс Event
class Event {
pulbic:
void ChangeSomeValue( someType someValue);
//other code
};
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
price()
выглядит совершенно бесполезной — ни ввода, ни вывода, ни даже побочного эффекта, и компилятор, вероятно, оптимизирует эту «переменную».