C++ 继承-运算符重载
我有两个类,基类和派生类。基本上,我有一个向量,它是C++ 继承-运算符重载,c++,oop,C++,Oop,我有两个类,基类和派生类。基本上,我有一个向量,它是*base类型,包含一个基本对象和一个派生对象。我为这两个类都重载了输出操作符,但是当我为派生类打印向量时,会调用基本输出操作符,尽管我分别重载了它。我应该在程序中更改什么以更改输出: 12 30 到 ? 代码如下: #包括 #包括 使用名称空间std; 阶级基础{ int x; 公众: 基(int_x):x(x){ friend ostream&operator基于底层对象的动态分派仅适用于虚拟成员函数。它不适用于非成员函数或非虚拟成员函数
*base
类型,包含一个基本对象和一个派生对象。我为这两个类都重载了输出操作符,但是当我为派生类打印向量时,会调用基本输出操作符,尽管我分别重载了它。我应该在程序中更改什么以更改输出:
12
30
到
?
代码如下:
#包括
#包括
使用名称空间std;
阶级基础{
int x;
公众:
基(int_x):x(x){
friend ostream&operator基于底层对象的动态分派仅适用于虚拟
成员函数。它不适用于非成员函数或非虚拟
成员函数
解决这个问题的一种方法是:
使用基本类型使用friend
函数
将obj
的参数类型更改为const
引用
从该函数中,调用virtual
成员函数来执行实际工作
类基{
int x;
公众:
基(int_x):x(x){
虚拟std::ostream&write(std::ostream&out)常量
{
return(我不知道你可以声明和定义一个friend函数!我可以建议使用智能指针而不是那些原始指针和内存泄漏吗?我只是写了这段代码来说明我想在其他更大的代码中做什么。顺便说一句,谢谢。
12
30 31
class base {
int x;
public:
base(int _x) : x(_x) {}
virtual std::ostream& write(std::ostream& out) const
{
return (out << x);
}
// Change obj to be a const reference
friend std::ostream& operator<<(std::ostream& out, base const& obj)
{
return obj.write(out);
}
};
class derived : public base {
int y;
public:
derived(int _x, int _y) : base(_x), y(_y) {}
virtual std::ostream& write(std::ostream& out) const
{
// Let the base class take care of its part.
base::write(out);
// Now take care of this class part.
return ( out << ' ' << y);
}
// This is useless now.
// friend ostream& operator<<(ostream& out, derived obj) {
// return out << (base) obj << ' ' << obj.y;
// }
};