首页 新闻 搜索 专区 学院

C#重载一元操作符使之输出50-100间的素数/// if (p1)什么意思?

0
[已解决问题] 解决于 2014-10-22 21:21

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 测试3
{
    class Program
    {
        static void Main(string[] args)
        {
            for (uint i = 50; i <= 100; i++)
            {
                Prime p1 = new Prime(i);
                if (p1)
                {
                    Console.WriteLine((uint)i);
                }
            }
            Console.Read();
        }
       
    }

    class Prime
    {
        public uint x;
        public Prime(uint x1)
        {
            x = x1;
        }
               public static bool operator true(Prime p)
        {
            for(uint i=2;i<=p.x/2;i++)
                if(p.x % i==0)
                    return false ;
            return true;
        }
        public static bool operator false(Prime p)
        {
            for (uint i = 2; i <= p.x / 2; i++)
                if (p.x % i == 0)
                    return true ;
            return false;
        }
    }

}

 if (p1)什么意思?

FrankYang2014的主页 FrankYang2014 | 初学一级 | 园豆:194
提问于:2012-01-03 08:46
< >
分享
最佳答案
0

Prime类重载了true和false操作,if (p1)就是如果是素数

奖励园豆:5
artwl | 专家六级 |园豆:16536 | 2012-01-04 09:07
其他回答(2)
0

if (p1==true)

dudu | 园豆:37173 (高人七级) | 2012-01-03 12:20

p1在哪里带上的ture和false值的?

支持(0) 反对(0) FrankYang2014 | 园豆:194 (初学一级) | 2012-01-04 10:07
0

因为重载了P1的true和false的1元操作符,所以在执行 Prime p1 = new Prime(i); 后执行if(P1)的时候会重新计算一下P1的true和false操作符,并且返回回来有效的bool值

diorlv | 园豆:259 (菜鸟二级) | 2012-01-04 10:08

刚开始的p.x=50;那是执行重载的true还是false?为什么测试的时候上来就执行true?

支持(0) 反对(0) FrankYang2014 | 园豆:194 (初学一级) | 2012-01-04 10:15

@FrankYang2014: 

应该==时候都执行true

只有!=时候采取执行false

试试吧,理论上,开关操作符,我也没有具体断过

支持(0) 反对(0) diorlv | 园豆:259 (菜鸟二级) | 2012-01-04 10:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册