我如何查看地址和值 c++ 类之间的区别
How can i see the difference between address and value c++ class?
我在指针和参考理解方面有问题。我有以下代码片段:
class U
{
protected:
int m;
public:
U(int m = 0) : m(m) {}
virtual void f() { cout << "U::f() @ m = " << m << endl; }
};
class V : public U
{
int n;
public:
V(int m, int n) : U(m), n(n) {}
void f() { cout << "V::f() @ m = " << m << ", n = " << n << endl; }
};
int main() {
V v1(1, 1), v2(2, 2);
v1.f();
v2.f();
U* u = &v1;
*u = v2;
v1.f();
v2.f();
}
我运行这个,输出是:
V::f() @ m = 1, n = 1
V::f() @ m = 2, n = 2
V::f() @ m = 2, n = 1
V::f() @ m = 2, n = 2
我不明白输出的第三行:V::f() @ m = 2, n = 1
.为什么m
改为2
?
*u=v2;
这并不能u
指向v2
.它将v2
分配给u
指向的对象U
子对象,即v1
的U
部分。这是因为*u
是一个U
对象。
首先*u = v2;没有让你指向 v2 .首先 u 被取消引用,它等效于(U)v1 = v2;
由于类 U 仅包含 U::int m,因此使用赋值操作仅修改 m。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?