C++ 中的类继承和向上转换
Class inheritance and upcasting in c++
这是我正在处理的简单代码,用于学习继承向下转换和向上转换等。
class A
{ public:
void p() {cout << “A::pn”;}
virtual void q() {cout << “A::qn”;}
};
class B : public A
{ public:
void p() { cout << “B::pn”;}
void q() { cout << “B::qn”;}
};
int main()
{ A* a1 = new B;
a1 -> p();
a1 -> q();
}
以下是我的预期输出
B::p
B::q
以下是实际输出
A::p
B::q
我的理解是,B类继承了A类。然后在主条目中,我们创建一个指向类 A 的指针,并将其引用设置为 B。因此,当我们调用函数 p() 和 q() 时,我希望打印类 B 中的任何内容。
谁能在这里澄清我的误解?
您会
注意到这两种方法之间的区别在于,一种在基类A
上标记为virtual
,另一种不是:
方法 q 定义为
virtual void q()
在基类上,而 p 只是
void p()
因此
A* a1 = new B;
a1 -> p(); ... Uses a1's type to determine the method, statically
a1 -> q(); ... Uses virtual method table to determine the method at run time
相关文章:
- 继承模板化转换运算符
- 共享指针继承,而不先显式强制转换
- 事件系统:使用类型转换或联合进行继承
- 从继承的类C++强制转换
- 继承会导致不明确的转换
- 将 void* 强制转换为多个继承类的超类不会调用正确的方法
- C++ 关于类继承的隐式转换
- 使用类继承将单个喜欢的列表转换为双向链表
- 如何将C++继承的带有函数的类转换为C样式?
- C++ MSVC 中的访问冲突,但不在 GCC 中进行多重继承和强制转换
- 模板实例和继承的转换错误
- 为什么 GCC 在使用继承的构造函数时警告我无用的强制转换
- 为什么私有继承对象允许成员函数将派生的*转换为基*,而外部不能
- 在多重继承场景中动态强制转换类型
- 使用模板无法按预期工作进行继承和强制转换
- 将void*强制转换为具有多重继承的类
- 避免在继承的树类中进行下转换
- 继承 c++ 向上转换
- 多重继承强制转换未按预期工作
- 继承和隐式类型转换