C++前递增运算符的继承
C++ inheritance of preincrement operator
我有以下两个类:
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++()
之前和之后的同一对象。
相关文章:
- 通过继承类使用来自不同命名空间的运算符
- 运算符继承和 cpp 核心准则 c.128 的问题
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 继承模板化转换运算符
- C++ 继承运算符=
- 在继承的模板类中使用下标 [] 运算符
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- C++模板化类上继承的运算符'<<'
- 类继承和运算符重载
- 通过继承重载运算符会导致歧义
- 使用继承的指针列表复制构造函数或重载运算符=
- C++中移动赋值运算符的继承
- 如何在C++上的多个继承上下文上使用特定基类中的运算符
- 继承类中的比较运算符
- 继承 C++14 中的模板化运算符 =:g++ 和 clang++ 的不同行为
- 具有继承的未声明标识符(运算符 ostream)
- 如何使用运算符编写可继承的模板类
- C++继承运算符<<
- 继承运算符 +()
- 继承运算符*的问题