如何定义类的=操作(例如 CString str = "Hello";)

chailyuan 2014-09-09 09:58:57
我自己定义的类,我想在初始化的时候这样做,该怎么做,谢谢
...全文
165 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chailyuan 2014-09-12
  • 打赏
  • 举报
回复
引用 9 楼 bojie5744 的回复:
直接抄了网上的例子,懒得打字. class Box{ public: int a; Box& operator=(int x){ a = x; return *this; } /* //如果要这样:Box box=10,必须定义下面这个构造函数而不是上面的赋值操作符。因为这句话不是赋值 Box(int x){ a = x; } */ }; 用法· void main(){ //Box t = 1;会发生错误,因为这不是赋值,是初始化,会调用Box的构造函数(即Box::Box(int),未定义)而不是赋值操作符。 //要调用赋值操作符应该这样 Box t; t = 1; cout << t.a << endl; }
谢谢,按照你说的两种方法。 难道CString str = “Hello”; 也是调用的构造函数么???
chailyuan 2014-09-12
  • 打赏
  • 举报
回复
引用 8 楼 arpnet99 的回复:
[quote=引用 6 楼 chailyuan 的回复:] 给个简单的代码吧
CString 跟进去。就有源码了。装个VA[/quote] 我看了,那个源码太复杂,看的头疼
  • 打赏
  • 举报
回复
直接抄了网上的例子,懒得打字. class Box{ public: int a; Box& operator=(int x){ a = x; return *this; } /* //如果要这样:Box box=10,必须定义下面这个构造函数而不是上面的赋值操作符。因为这句话不是赋值 Box(int x){ a = x; } */ }; 用法· void main(){ //Box t = 1;会发生错误,因为这不是赋值,是初始化,会调用Box的构造函数(即Box::Box(int),未定义)而不是赋值操作符。 //要调用赋值操作符应该这样 Box t; t = 1; cout << t.a << endl; }
这不是鸭头 2014-09-12
  • 打赏
  • 举报
回复
引用 6 楼 chailyuan 的回复:
给个简单的代码吧
CString 跟进去。就有源码了。装个VA
hhhh63 2014-09-12
  • 打赏
  • 举报
回复
引用 5 楼 chailyuan 的回复:
您还是给我一个简单的例子吧,例如 ClassName newClass = int; 就把后面int的数值赋值到新建类中了
ClassName newClass = int;这句话语法错误,=两边的数据类型要一样。 只能写成 ClassName oldClass; ClassName newClass = oldClass; 举个简单的例子:
class ClassName
{
public:
	int m_n;
	void operator=(_In_ const ClassName pc) throw()
    {
		this->m_n = pc.m_n;
	}
};

	ClassName c1;
	c1.m_n = 100;
	ClassName c2 = c1;
chailyuan 2014-09-12
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
重载operator=操作符
给个简单的代码吧
chailyuan 2014-09-12
  • 打赏
  • 举报
回复
引用 3 楼 hhhh63 的回复:
原理是把等号变成一个函数,等号后面的类是参数,在等号函数中把所有的数据都复制到新类中。 我的一个实例
// Additional Operations
// 头文件
void operator=(_In_ const PrivateInfomation& pi) throw();

// 重载等号
void PrivateInfomation::operator=(_In_ const PrivateInfomation& pi) throw()
{
	m_nVersion = pi.m_nVersion;

	for( int i = 0; i < sizeof(m_users) / sizeof(Ttmcauser); i++ )
	{
		m_users[i].id		= pi.m_users[i].id;
		m_users[i].serial	= pi.m_users[i].serial;
		m_users[i].name		= pi.m_users[i].name;	// 不复制密码
	}

	m_strInstitution = pi.m_strInstitution;
	m_strInstitutionID = pi.m_strInstitutionID;
	m_nScanCount = pi.m_nScanCount;

	//m_bIsReady = TRUE;	// 重制后设为真,数据准备好
}
您还是给我一个简单的例子吧,例如 ClassName newClass = int; 就把后面int的数值赋值到新建类中了
zyjj_99 2014-09-09
  • 打赏
  • 举报
回复
运算符重载
阿源是少年 2014-09-09
  • 打赏
  • 举报
回复
看看C++运算符重载你就明白了 例子: class A { private: int data; }; 两个对象 A a 和 A b, a = b 实现操作 a.data = b.data; A& operator =(A& obj) { this->data = obj.data; return *this; } 还有一种是重载为友元函数: friend A& operator =(A& a, A& b) { a.data = b.data; return a; }
Eleven 2014-09-09
  • 打赏
  • 举报
回复
重载operator=操作符
hhhh63 2014-09-09
  • 打赏
  • 举报
回复
原理是把等号变成一个函数,等号后面的类是参数,在等号函数中把所有的数据都复制到新类中。 我的一个实例
// Additional Operations
// 头文件
void operator=(_In_ const PrivateInfomation& pi) throw();

// 重载等号
void PrivateInfomation::operator=(_In_ const PrivateInfomation& pi) throw()
{
	m_nVersion = pi.m_nVersion;

	for( int i = 0; i < sizeof(m_users) / sizeof(Ttmcauser); i++ )
	{
		m_users[i].id		= pi.m_users[i].id;
		m_users[i].serial	= pi.m_users[i].serial;
		m_users[i].name		= pi.m_users[i].name;	// 不复制密码
	}

	m_strInstitution = pi.m_strInstitution;
	m_strInstitutionID = pi.m_strInstitutionID;
	m_nScanCount = pi.m_nScanCount;

	//m_bIsReady = TRUE;	// 重制后设为真,数据准备好
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧