预扩展运算符的C ++继承

时间:2015-10-20 15:43:16

标签: c++

我有以下两个类:

     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; 
   };

operator ++的实现如下:

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

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

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

“dev”似乎指向内存中的其他位置。为什么?朋友运营商为什么不继承?这是一个课堂练习,所以我需要解决这个问题 谢谢!。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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++()之前和之后的同一个对象。

答案 2 :(得分:3)

在语句++dev;中,您没有在operator++指向的对象上调用dev - 您在dev本身上调用它,这是一个指针,通过递增它,你会指出一些可能无效的东西。要在operator++实例上调用DevClass,您可以使用:

++(*dev);