我想在派生类
Coord
的初始值设定项列表中包含类 Base
中结构体 Derived
的引用。当我将 Coord
的实例传递给 Derived
类构造函数时,会创建 Coord
的新实例 - 或者至少我认为这就是发生的情况,因为我无法从派生类更新我的 coord
对象.
我以这种方式传递引用是否违反了某种规则?还是只是做错了?
参见示例:
#include <iostream>
struct Coord{
int x = 1;
int y = 1;
void printCoord(){
std::cout << "X: " << x << " Y: " << y << std::endl;
}
};
class Base{
public:
Coord myCoord;
Base(Coord &coord): myCoord(coord){} // How do I modify this line so Base gets a copy of myCoord?
virtual void updateCoord(int x, int y){};
};
class Derived : public Base {
public:
Derived(Coord &coord): Base(coord){} // Or possibly this line?
virtual void updateCoord(int x, int y){
myCoord.x = x;
myCoord.y = y;
std::cout << "Updated to:" << std::endl;
myCoord.printCoord();
}
};
int main(){
Coord myCoord;
Base *baseptr;
Derived d(myCoord);
baseptr = &d;
std::cout << "Before update:" << std::endl;
myCoord.printCoord();
baseptr->updateCoord(2,2);
std::cout << "After update:" << std::endl;
myCoord.printCoord();
return 0;
}
我期望得到以下输出:
Before update:
X: 1 Y: 1
Updated to:
X: 2 Y: 2
After update:
X: 2 Y: 2
但是得到:
Before update:
X: 1 Y: 1
Updated to:
X: 2 Y: 2
After update:
X: 1 Y: 1
将Base中
myCoord
的声明更改为引用:
class Base{
public:
Coord& myCoord; // reference declaration
Base(Coord &coord): myCoord(coord){} // How do I modify this line so Base gets a copy of myCoord?
virtual void updateCoord(int x, int y){};
};
然后 myCoord 将与
main
中的 Coord 实例具有相同的引用。