请教个问题

我看你有戏 2018-05-03 02:06:01


class Test
{
public:
Test()
{
m_a = 10;
}
~Test()
{

}
bool operator !()
{
return true;
}

private:
int m_a;
};

int main()
{
Test t;
if(!t)
{
cout << "!t" << endl;
}

if(t)
{
cout << "t" << endl;
}
}



if(t)
那句话编译通不过 ,如何修改Test类,让程序可以编译通过
谢谢

...全文
60226 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2018-05-03
  • 打赏
  • 举报
回复
https://download.csdn.net/download/henry3695/10389497 我把智能指针代码已经放上去了, 看下代码你就知道我为啥要用这个功能,谢谢
引用 8 楼 phenix2009 的回复:
或者把在类里面把bool重载一下,不过真不知有什么意义:


class Test
{
public:
	Test()
	{
		m_a = 10;
	}

	~Test()
	{

	}
	bool operator !()
	{
		return true;
	}


	operator bool()
	{
		// 判断代码
		return true;     //or return false
	}
private:
	int m_a;
};

int main()
{
	Test t;
	if (!t)
	{
		cout << "!t" << endl;
	}

	if (t)
	{
		cout << "&t" << endl;
	}
}
paschen 版主 2018-05-03
  • 打赏
  • 举报
回复
重载类型转换运算符就行了,比如可以隐式转换为bool,给个参考代码:

class Test
{
public:
Test()
{
m_a = 10;
}
~Test()
{

}
operator bool() const
{
return m_a != 0;
}

private:
int m_a;
};

int main()
{
Test t;
if (!t)
{
cout << "!t" << endl;
}

if (t)
{
cout << "t" << endl;
}
}
我看你有戏 2018-05-03
  • 打赏
  • 举报
回复
引用 9 楼 paschen 的回复:
重载类型转换运算符就行了,比如可以隐式转换为bool,给个参考代码:
class Test
{
public:
	Test()
	{
		m_a = 10;
	}
	~Test()
	{

	}
	operator bool() const
	{
		return m_a != 0;
	}

private:
	int m_a;
};

int main()
{
	Test t;
	if (!t)
	{
		cout << "!t" << endl;
	}

	if (t)
	{
		cout << "t" << endl;
	}
}
非常感谢 楼上这些大哥
白色一大坨 2018-05-03
  • 打赏
  • 举报
回复
或者把在类里面把bool重载一下,不过真不知有什么意义:


class Test
{
public:
	Test()
	{
		m_a = 10;
	}

	~Test()
	{

	}
	bool operator !()
	{
		return true;
	}


	operator bool()
	{
		// 判断代码
		return true;     //or return false
	}
private:
	int m_a;
};

int main()
{
	Test t;
	if (!t)
	{
		cout << "!t" << endl;
	}

	if (t)
	{
		cout << "&t" << endl;
	}
}
白色一大坨 2018-05-03
  • 打赏
  • 举报
回复
你说的判断,只能是if里面判断指针,不可能对类对象进行判断: Test *pt; if (pt) { cout << "t" << endl; }
我看你有戏 2018-05-03
  • 打赏
  • 举报
回复

T* operator &()
		{
			return rp->p;
		}
看来也只能先用取地址搞搞了
我看你有戏 2018-05-03
  • 打赏
  • 举报
回复
引用 3 楼 phenix2009 的回复:
[quote=引用 2 楼 henry3695 的回复:] [quote=引用 1 楼 phenix2009 的回复:] 因为类里面的!这个运算符进行了重载,所以!t表示的是一个true,符合if内要求一个boo值的条件。 而t本身就是一个类对象,不符合if内要求一个bool值的条件。 你查一下运算符重载的概念就知道了。
有没有办法用重载实现一下 [/quote] 没有任何意义,为什么要这样对一个类对象进行判断,这是不合语法的行为[/quote] 写智能指针的时候需要用到这个功能
白色一大坨 2018-05-03
  • 打赏
  • 举报
回复
引用 2 楼 henry3695 的回复:
[quote=引用 1 楼 phenix2009 的回复:] 因为类里面的!这个运算符进行了重载,所以!t表示的是一个true,符合if内要求一个boo值的条件。 而t本身就是一个类对象,不符合if内要求一个bool值的条件。 你查一下运算符重载的概念就知道了。
有没有办法用重载实现一下 [/quote] 没有任何意义,为什么要这样对一个类对象进行判断,这是不合语法的行为
我看你有戏 2018-05-03
  • 打赏
  • 举报
回复
引用 1 楼 phenix2009 的回复:
因为类里面的!这个运算符进行了重载,所以!t表示的是一个true,符合if内要求一个boo值的条件。 而t本身就是一个类对象,不符合if内要求一个bool值的条件。 你查一下运算符重载的概念就知道了。
有没有办法用重载实现一下
白色一大坨 2018-05-03
  • 打赏
  • 举报
回复
要做就再重载一个符号,可以分别进行判断:

class Test
{
public:
	Test()
	{
		m_a = 10;
	}

	~Test()
	{

	}
	bool operator !()
	{
		return true;
	}

	bool operator &()
	{
		return true;
	}

private:
	int m_a;
};

int main()
{
	Test t;
	if (!t)
	{
		cout << "!t" << endl;
	}

	if (&t)
	{
		cout << "&t" << endl;
	}
}
白色一大坨 2018-05-03
  • 打赏
  • 举报
回复
因为类里面的!这个运算符进行了重载,所以!t表示的是一个true,符合if内要求一个boo值的条件。 而t本身就是一个类对象,不符合if内要求一个bool值的条件。 你查一下运算符重载的概念就知道了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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