首页 > 解决方案 > 重载运算符=? C++

问题描述

我在尝试将我创建的类中的对象插入字符时遇到问题。我创建了一个类名 Element 作为更大程序的一部分,但是当我尝试重载 operator= 以便我可以进入 char 变量时,我在 Element obj 中得到的 char 没有任何作用......

元素.h

class Element {

private:
    char val;
public:
    Element();
    Element(char newVal); //check input - throw execption
    ~Element();

friend ostream& operator<<(ostream& os, const Element& obj);
void setElement(char newVal);
char getElement();

void operator= (const Element newVal);
void operator= (char newVal);


};

元素.cpp

#include "Element.h"



Element::Element()
{
    val ='.';
}

Element::Element(char newVal)
{
    if (newVal!='X' && newVal!='O'&& newVal!='.'){
        inputExecption error;
        error.what();
    } else{
        val=newVal;
    }
}

Element::~Element()
{

}

void Element::setElement(char newVal)
{
    if (newVal!='X' && newVal!='O'&& newVal!='.'){
        inputExecption error;
        error.what();
    } else{
        val=newVal;
    }
}

char Element::getElement()
{
    return val;
}

ostream& operator<<(ostream& os, const Element& obj)
{

    return os << obj.val;

}

void Element::operator= (const Element Value){
    val = Value.val;
}

void Element::operator= (char newVal){
    if(val != 'X' && val != 'O'){
        inputExecption a;
        a.what();
    }
    val = newVal;
}


正如我所说,我想做的是:

Element x='X';
char c = x; //(c=x.val)
cout<<c<<endl;//Will print X

谢谢!:)

标签: c++charoperator-overloading

解决方案


换句话说,您正在尝试将 type 的对象转换为 typeElement的对象char。您可以为此使用转换运算符:

class Element {
  // ...
  operator char() const { return val; }
};

Element赋值运算符仅在赋值的左侧使用实例时才有效。


推荐阅读