[C ++类继承和赋值运算符

问题描述 投票:2回答:2

我来这里问一些我自己无法解决的问题。我一直在编码一个小类,该类存储32位数组,并且可以执行简单的数学运算,例如+-/*

假设我有一个类似的课程:

class Binary_Class
{
  char bin[32];               // 32 bits array to hold an unsigned binary number
  void set_dec(int value){};  // setting the bin[32] value based on input value

  // I have operator + and = to perform on objects of this class.
  Binary_Class& operator= (const Binary_Class&);
  const Binary_Class operator+ (const Binary_Class&);
}

[直到现在,如果我声明3个a类的对象bcBinary_Class,然后从set_decab,就不会出现问题,语句c=a+b可以被使用(?)

但是,我想通过使用新类来扩展类二进制文件

class Binary_Class_Extended: public Binary_Class
{
  // weird functions
}

如果我声明类a的3个对象bcBinary_Class_Extended,在此之前我仍然可以像以前一样使用c=a+b吗?

在Netbean中,如果所有的都是c=a+b,则没有匹配我的Binary_Class_Extended的运算符,但是如果我将c声明为Binary_Class,则该语句有效。这意味着a+b返回const Binary_Class,就好像operator+没有被带到新类中。

我是想念东西还是这样吗?

当然,我可以发布整个代码,因为这只是一个任务,但我认为这些信息目前就足够了。


更新

 class Binary_Class
 {
  char bin[32];               // 32 bits array to hold an unsigned binary number
  void set_dec(int value){};  // setting the bin[32] value based on input value

  //i have operator + and = to perform on objects of this class.
  Binary_Class& operator= (const Binary_Class&);
  const Binary_Class operator+ (const Binary_Class&) const;
}

class Binary_Class_Extended: public Binary_Class
{
  // weird functions
}

[当我尝试显示Binary_Class_Extended的所有对象时,显示此错误:

main.cpp:285:错误:'sd =((Binary_Class *)(&sa))-> Binary_Class :: operator +(((const Binary_Class&)((const Binary_Class *)(( Binary_Class *)(&sb)))))')'

Binary_ET_Class sa,sb,sc;

sc=sa+sb //将sasb初始化为非空值;

我一直在研究的完整源代码:https://pastebin.com/eiVz0f5p

c++ class inheritance binary operator-keyword
2个回答
2
投票

继承的函数保留其指纹,因此如果Binary_Class运算符+被继承,则其返回值为...?


1
投票

通常,继承和赋值(“值语义”)在C ++中不容易混合。在第二种情况下,“ a + b”将返回基类的实例,除非您为派生类定义了一个分隔符operator +。然后仅将结果分配给触发错误的“ c”的基类部分。有时也称为切片/截断。请注意,运算符的选择在编译时进行,没有调用任何虚函数,因此静态类型必须匹配。

不要混合值类型和多态类型。如果确实需要并且您有固定的已知层次结构,则可以在分配给基类时使用“句柄惯用法”保留派生信息。不过,这不是一个初学者的话题。

© www.soinside.com 2019 - 2024. All rights reserved.