我有以下两个类:
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”似乎指向内存中的其他位置。为什么?朋友运营商为什么不继承?这是一个课堂练习,所以我需要解决这个问题 谢谢!。
答案 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);