C++前递增运算符的继承

C++ inheritance of preincrement operator

本文关键字:继承 运算符 C++      更新时间:2023-10-16

我有以下两个类:

     class MyClass
     {
       friend ostream& operator<<(ostream&, const MyClass& );   
       friend int operator+(const MyClass &, const MyClass &);
       public:
         MyClass(const int );
         MyClass(const int, const int);
         MyClass (const MyClass *,  const MyClass *);
         ~MyClass();
         MyClass& operator++();        
         void printValue();
         void setValue(int);           
         int  getValue() const;
       private:
         int value;     
     };

   class DevClass : public MyClass
   {
     public: 
       DevClass(const int, const char *s); 
       char getId() const;
       void setId(char *s);           
   private:
       char id; 
   };

运算符 ++ 的实现如下:

 MyClass& MyClass::operator++() 
  {
   this->value +=1;
   return *this;
  } 

现在,如果我将运算符与派生类一起使用:

 DevClass *dev=new DevClass(10,'c');
 ++dev;

"dev"似乎指向内存中的其他地方。为什么?为什么友元运算符不是继承的?这是一个课堂练习,所以我需要解决这个问题。
谢谢!。

dev是类型DevClass *,它是一个指针,而不是你的类。你是说++(*dev)吗?

在语句++dev;中,您不会对dev指向的对象调用operator++ - 而是在dev本身(指针(上调用它,这是一个指针,通过增加它,您可以使其指向可能无效的内容。要在DevClass实例上调用operator++,您可以使用:

++(*dev);
DevClass dev=new DevClass(10,'c');
 ++dev;

不是法典。编译器应将其报告为错误。

如果您使用:

DevClass* dev=new DevClass(10,'c');
 ++dev; // Incrementing the pointer, not the object.

dev指向不同的位置是有道理的,尽管这是导致未定义行为的原因,因为dev只指向一个对象。

如果您使用:

DevClass dev = DevClass(10,'c');
 ++dev; // Incrementing the object

dev是调用 operator++() 之前和之后的同一对象。