c选项不是用b赋值给d吗
时间: 2024-03-10 10:44:40 浏览: 49
非常抱歉,我理解错误了。选项 C 是错误的,因为基类对象不能隐式地转换为派生类对象,即使是公有继承。应该使用基类指针或引用来引用或指向派生类对象。因此,正确的代码应该是:
```c++
Base* pBase = new Dev(); // A
Base b;
Dev* pDev = &b; // 错误
Base b;
Dev d;
Base* pBase = &b;
Dev* pDev = static_cast<Dev*>(pBase); // 正确
```
选项 B 是错误的,因为基类对象不能隐式地转换为派生类指针,即使是公有继承。
选项 D 是错误的,因为基类对象不能隐式地转换为派生类引用,即使是公有继承。
相关问题
. 若 a、b、c、d 都是 int 类型变量且初值为 0,以下选项中不正确的赋值语句是_______。 A) a=b=c=100; B) d=(c=22)–(b++); C) c+=b; D) d++;
选项 B 中的赋值语句不正确。
表达式 `(c=22)–(b++)` 的值是 `22 - 0 = 22`,因为 `c` 被赋值为 `22`, `b` 的值在赋值之前先作为表达式的值被使用,它是 `0`,然后 `b` 的值增加了 `1`。
但是,这个表达式的结果不能被正确地赋值给 `d`,因为 `d` 是整型变量,但是表达式的结果是一个负数。
C语言里,下列选项正确的赋值语句是( )。 A. t += 1; B. n1 = (n2 = (n3 = 0)); C. k = i = j; D. a = b + c = 1;
选项 A、B、C 都是正确的赋值语句,选项 D 不是正确的赋值语句。
选项 A 是将变量 t 的值加 1,并将结果赋值给 t。
选项 B 是将 n3 赋值为 0,然后将 n3 的值赋给 n2,最后将 n2 的值赋给 n1。
选项 C 是将 j 的值赋给 i,然后将 i 的值赋给 k。
选项 D 中的 a = b + c = 1 不是一个正确的赋值语句,因为赋值运算符的优先级低于加法运算符,所以会先执行 b + c,然后将结果赋给 a,最后再将 1 赋给 a,这显然不是我们想要的结果。
阅读全文