使用基本 class 方法更改派生 class 中的基本 class 字段
Change base class fields in derived class with base class method
我不确定我哪里错了,但我这边似乎有些怀念。
我有一个基础 class 和一个派生的 class 以及本例中的一些方法。
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
Derived a(1);
a.reset(2);
a.curr_loc //is still 1?
当我现在调用“a.curr_loc”时,我仍然得到 1。我以为我会用方法 reset 覆盖值,但这是在不同的对象上完成的......
有没有一种方法可以做到这一点,而无需为派生的 class 复制基础 class 的函数?
curr_loc = curr_loc;
这一行什么都不做。它为自己分配了一个变量。事实上还有一个名为 curr_loc
的实例变量在这里没有被引用,因为有一个同名的局部变量隐藏它。
您可以将参数重命名为其他名称,也可以显式使用 this
进行赋值。
this->curr_loc = curr_loc;
这段代码
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
有语法错误。
你需要写
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc){}
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
};
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc) {}
};
注意成员函数reset的定义。它应该定义为
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
或喜欢
void reset(int curr_loc){
this->curr_loc = curr_loc;
}
否则此语句中参数ciur_loc赋值给自身
curr_loc = curr_loc;
因为它隐藏了与 class Base 同名的数据成员。
我不确定我哪里错了,但我这边似乎有些怀念。 我有一个基础 class 和一个派生的 class 以及本例中的一些方法。
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
Derived a(1);
a.reset(2);
a.curr_loc //is still 1?
当我现在调用“a.curr_loc”时,我仍然得到 1。我以为我会用方法 reset 覆盖值,但这是在不同的对象上完成的...... 有没有一种方法可以做到这一点,而无需为派生的 class 复制基础 class 的函数?
curr_loc = curr_loc;
这一行什么都不做。它为自己分配了一个变量。事实上还有一个名为 curr_loc
的实例变量在这里没有被引用,因为有一个同名的局部变量隐藏它。
您可以将参数重命名为其他名称,也可以显式使用 this
进行赋值。
this->curr_loc = curr_loc;
这段代码
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc)
void reset(int curr_loc){
curr_loc = curr_loc;
}
}
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc)
}
有语法错误。
你需要写
class Base {
public:
int curr_loc;
Base(int curr_loc):curr_loc(curr_loc){}
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
};
class Derived: public Base{
public:
Derived(int curr_loc):Base(curr_loc) {}
};
注意成员函数reset的定义。它应该定义为
void reset(int curr_loc){
Base::curr_loc = curr_loc;
}
或喜欢
void reset(int curr_loc){
this->curr_loc = curr_loc;
}
否则此语句中参数ciur_loc赋值给自身
curr_loc = curr_loc;
因为它隐藏了与 class Base 同名的数据成员。