对象上的赋值操作符
assignment operator on objects
我是编程新手,基于谷歌搜索,第一击总是'stackoverflow',这对我很有帮助。这部分我没得到答案。这是一个简单的代码,我一直在努力学习赋值操作符如何在对象上工作。我调查了一些书,没有例子。
// wood.h
using namespace std;
///#include <cstdio>
//#include <cstdlib>
//#include <iostream>
//#include <string>
class wood {
public :
wood (void);
wood (string type, string color) ;
void display(void);`
wood & operator=(const wood © );
wood & operator=(const wood * const © );
private :
string m_color;
string m_name;
};
// wood.cc
wood:: wood (string name, string color) {
m_name = name;
m_color = color;
}
wood & wood::operator=(const wood &from) {`
cout << "calling assignment construction of" << from.m_name << endl;
m_name = from.m_name;
m_color = from.m_color;
return *this;
}
void wood::display (void) {`
cout << "name: " << m_name << " color: " << m_color << endl;
}
// test_wood.cc
int main ()
{
wood *p_x, *p_y;`
wood a("abc", "blue");
wood b("def", "red" );
a.display();
b.display();
b = a; // calls assignment operator, as I expected`
a.display();`
b.display();`
p_x = new wood ("xyz", "white");
p_y = new wood ("pqr", "black");
p_x->display();`
p_y->display();`
p_y = p_x; // Here it doesn't call assignment operator, Why?
// It does only pointer assignement, p_y original pointer goes into ether.
p_x->display();`
p_y->display();`
printf("p_x:%p, p_y:%p n", p_x, p_y);
return 0;
}
//output:
name: abc color: blue
name: def color: red
calling assignment construction abc
name: abc color: blue
name: abc color: blue
name: xyz color: white
name: pqr color: black
name: xyz color: white
name: xyz color: white
p_x:0x9be4068, p_y:0x9be4068
您正在查看的是'操作符重载'。在这种技术中,您为现有的操作符定义一个新的行为,在本例中是'='。基本上,当在main()中调用该操作符时,它将右侧操作数的成员值赋给左侧操作数的成员。
正如您所指出的,p_y = p_x;
只是一个简单的指针赋值。这是因为您重载了wood
的赋值操作符,而不是wood*
的。
将p_y = p_x;
改为*p_y = *p_x;
。
你可以实现一个免费的函数来重载wood*
的operator=
,但我不认为这是一个好主意
相关文章:
- 在C++中,当表达式涉及对象时,将表达式赋值到对象中时,是否有定义的操作顺序?
- 重载运算符 -- 无法在赋值中将对象转换为基类型
- 赋值类对象的值
- 简单的引用变量赋值导致对象的全局指针出现segfault
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- c++模板赋值操作符重载——赋基本类型给对象
- 对象的赋值操作符
- 清除std::vector对象需要赋值操作符.为什么
- c++赋值操作符,如何将一个对象设置为等于一个新对象的实例
- 对象上的赋值操作符
- 声明对对象的引用和赋值操作符
- 退出重载赋值操作符将调用析构函数来删除对象
- c++:如果类禁用赋值操作符,是否有可能创建一系列类对象(使用vector?)