C++可以重新分配引用
C++ makes possible to reassign reference?
#include <iostream>
using namespace std;
class Base{
public:
virtual void f(){
std::cout << "Basen";
}
};
class Derived1 : public Base{
public:
void f(){
std::cout << "Derived1n";
}
};
class Derived2 : public Base{
public:
void f(){
std::cout << "Derived2n";
}
};
int main() {
Derived1 d1;
Derived2 d2;
Base& ref = d1;
ref.f();
ref = d2;
ref.f();
return 0;
}
据说不能重新分配参考。在这里,编译器接受此代码,输出对我来说是无法理解的。输出:
派生1 派生1
那么,ref = d2;
到底意味着什么呢?
> ref = d2
实际所做的是将d2
的值分配给d1
- 但是,它仍然是d1
ref
引用的。由于仍引用d1
,因此调用ref.f
仍会打印Derived1
。
假设您将一个数据值v
添加到基类 - 将其设置为 d1
中的 1
和 d2
中的2
。将f
的实现更改为打印v
。你会得到类似的东西:
#include <iostream>
using namespace std;
class Base{
public:
int v;
virtual void f(){
std::cout << "Base : v=" << v << "n";
}
};
class Derived1 : public Base{
public:
void f(){
std::cout << "Derived1 : v=" << v << "n";
}
};
class Derived2 : public Base{
public:
void f(){
std::cout << "Derived2 : v=" << v << "n";
}
};
int main() {
Derived1 d1;
d1.v = 1;
Derived2 d2;
d2.v = 2;
Base& ref = d1;
ref.f();
ref = d2;
ref.f();
return 0;
}
运行时,这将打印:
Derived1 : v=1
Derived1 : v=2
希望这使它更清晰一些。
祝你好运。
无法重新分配引用。它们的工作方式类似于变量的别名。
ref = d2
调用Base
类的运算符Base
并将Derived2 d2
变量的一部分复制到Derived1 d1
。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 如何在构造函数中构造对象并分配引用
- C++中的可重新分配引用
- 如何分配引用链的末端
- c++ 在 if 语句中分配引用变量
- 为什么不能重新分配引用的目标对象?
- 阻止重新分配引用
- C++ 从传入的引用变量中分配引用变量
- C++可以重新分配引用
- 重新分配C++引用变量
- 有条件地分配引用
- 我们可以在C++中重新分配引用吗
- C++在为指针分配引用时获取临时错误的地址
- 为什么可以在 for 语句中重新分配引用常量
- 如何(优雅地)根据字符别名分配引用成员
- 处理赋值运算符重载;您可以重新分配引用吗?
- 对左值和右值的可分配引用