如何改变一个基class的成员的值?
How can change the value of a member of a base class?
我有三个 classes:
class Operation{
public:
virtual bool execute(const Solution& sol, Solution& newSol) = 0;
pair<int, int> pair_routes;
};
class OperationR : public Operation{
public:
OperationR(){};
bool execute(const Solution& sol, Solution& newSol);
pair<int, int> pair_routes;
};
class OperationD : public Operation{
public:
OperationD(){};
bool execute(const Solution& sol, Solution& newSol);
pair<int, int> pair_routes;
};
pair_routes
的值在 execute()
函数内部改变。
在 main()
函数中,我创建了 class Operation
的 vector
,如下所示:
vector<Operation*> operations;
OperationR* opr = new OperationR();
operations.push_back(opr);
OperationD* opd = new OperationD();
operations.push_back(opd);
Operation* op = operations[0];
Solution s1, s2;
op->execute(s1, s2); // line 1
cout << op->pair_routes.first;
编译没有问题,但是即使第1行pair_routes
的值发生变化,它returns值为0。我尝试在base [=中初始化这个成员27=]有不同的值,每次程序returns这个值。
您派生的 classes 正在声明它们自己的 pair_routes
成员 shadow(即隐藏)基的 pair_routes
成员Operation
class.
当您执行 op->execute()
时,op
指向一个 OperationR
对象,因此它调用 OperationR::execute()
,然后修改 OperationR::pair_routes
数据成员。但是之后,您将显示 Operation::pair_routes
数据成员,该成员未被修改。
摆脱阴影 pair_routes
数据成员,您不需要它们。派生的 classes 可以访问基础 class.
的 pair_routes
数据成员
class Operation{
public:
virtual bool execute(const Solution& sol, Solution& newSol) = 0;
pair<int, int> pair_routes;
};
class OperationR : public Operation{
public:
OperationR() = default;
bool execute(const Solution& sol, Solution& newSol) override;
//pair<int, int> pair_routes; // <-- get rid of this
};
class OperationD : public Operation{
public:
OperationD() = default;
bool execute(const Solution& sol, Solution& newSol) override;
//pair<int, int> pair_routes; // <-- get rid of this
};
我有三个 classes:
class Operation{
public:
virtual bool execute(const Solution& sol, Solution& newSol) = 0;
pair<int, int> pair_routes;
};
class OperationR : public Operation{
public:
OperationR(){};
bool execute(const Solution& sol, Solution& newSol);
pair<int, int> pair_routes;
};
class OperationD : public Operation{
public:
OperationD(){};
bool execute(const Solution& sol, Solution& newSol);
pair<int, int> pair_routes;
};
pair_routes
的值在 execute()
函数内部改变。
在 main()
函数中,我创建了 class Operation
的 vector
,如下所示:
vector<Operation*> operations;
OperationR* opr = new OperationR();
operations.push_back(opr);
OperationD* opd = new OperationD();
operations.push_back(opd);
Operation* op = operations[0];
Solution s1, s2;
op->execute(s1, s2); // line 1
cout << op->pair_routes.first;
编译没有问题,但是即使第1行pair_routes
的值发生变化,它returns值为0。我尝试在base [=中初始化这个成员27=]有不同的值,每次程序returns这个值。
您派生的 classes 正在声明它们自己的 pair_routes
成员 shadow(即隐藏)基的 pair_routes
成员Operation
class.
当您执行 op->execute()
时,op
指向一个 OperationR
对象,因此它调用 OperationR::execute()
,然后修改 OperationR::pair_routes
数据成员。但是之后,您将显示 Operation::pair_routes
数据成员,该成员未被修改。
摆脱阴影 pair_routes
数据成员,您不需要它们。派生的 classes 可以访问基础 class.
pair_routes
数据成员
class Operation{
public:
virtual bool execute(const Solution& sol, Solution& newSol) = 0;
pair<int, int> pair_routes;
};
class OperationR : public Operation{
public:
OperationR() = default;
bool execute(const Solution& sol, Solution& newSol) override;
//pair<int, int> pair_routes; // <-- get rid of this
};
class OperationD : public Operation{
public:
OperationD() = default;
bool execute(const Solution& sol, Solution& newSol) override;
//pair<int, int> pair_routes; // <-- get rid of this
};