• Go语言的素数对象编程实现及其使用


    有关Go语言的面向对象编程,看了几本书,看了若干例子也没有太明白。太惭愧啊!

    后来看了一个例子,结合之前书上的内容,总算有点头绪了。

    然而,自己的程序写出来编译后还是出来不少问题。

    后来,在已有的程序的基础上,稍加改进,终于明白了一些问题。

    有关Go语言的面向对象编程,编过一个之后,就不困难了,只需要注意若干细节就可以了。

    Go语言与C语言、C++语言和Java语言还是有差异的,需要慢慢体会。


    这里编写了一个素数对象程序,包括使用该对象的程序。虽然不是很完善,但是麻雀虽小五脏俱全,在这基础上可以演变出各种各样的面向对象的Go语言程序。这是一个样例!


    Go语言程序(面向对象程序):

    // myprime project myprime.go
    package myprime
    
    import (
    	"math"
    )
    
    const MAXN int = 800
    const PRIME_NUM int = 139
    
    type MyPrime struct {
    	pflag [MAXN + 1]bool
    	prime [PRIME_NUM + 1]int
    }
    
    func (mp *MyPrime) ESieve(n int) {
    	mp.pflag[2] = true
    	for i := 3; i <= n; i += 2 {
    		mp.pflag[i] = true
    	}
    
    	end := int(math.Sqrt(float64(n)))
    
    	for i := 3; i <= end; i += 2 {
    		step := i + i
    		if mp.pflag[i] {
    			j := i + step
    			for j <= n {
    				mp.pflag[j] = false
    				j += step
    			}
    		}
    	}
    
    	j := 2
    	mp.prime[0] = 1
    	mp.prime[1] = 2
    	for i := 3; i <= n; i += 2 {
    		if mp.pflag[i] {
    			mp.prime[j] = i
    			j++
    		}
    	}
    }
    
    func (mp *MyPrime) Init() {
    	mp.ESieve(MAXN)
    }
    
    func (mp *MyPrime) GetPrime(n int) int {
    	return mp.prime[n]
    }
    
    func (mp *MyPrime) GetPrimeNum() int {
    	return PRIME_NUM
    }


    Go语言主程序(使用对象的程序):

    // mytest project main.go
    package main
    
    import (
    	"fmt"
    	"myprime"
    )
    
    func main() {
    	mp := new(myprime.MyPrime)
    	mp.Init()
    
    	for i := 1; i <= mp.GetPrimeNum(); i++ {
    		fmt.Printf("%d: %d
    ", i, mp.GetPrime(i))
    	}
    
    }

    程序运行结果:

    1: 2
    2: 3
    3: 5
    4: 7
    5: 11
    6: 13
    7: 17
    8: 19
    9: 23
    10: 29
    11: 31
    12: 37
    13: 41
    14: 43
    15: 47
    16: 53
    17: 59
    18: 61
    19: 67
    20: 71
    21: 73
    22: 79
    23: 83
    24: 89
    25: 97
    26: 101
    27: 103
    28: 107
    29: 109
    30: 113
    31: 127
    32: 131
    33: 137
    34: 139
    35: 149
    36: 151
    37: 157
    38: 163
    39: 167
    40: 173
    41: 179
    42: 181
    43: 191
    44: 193
    45: 197
    46: 199
    47: 211
    48: 223
    49: 227
    50: 229
    51: 233
    52: 239
    53: 241
    54: 251
    55: 257
    56: 263
    57: 269
    58: 271
    59: 277
    60: 281
    61: 283
    62: 293
    63: 307
    64: 311
    65: 313
    66: 317
    67: 331
    68: 337
    69: 347
    70: 349
    71: 353
    72: 359
    73: 367
    74: 373
    75: 379
    76: 383
    77: 389
    78: 397
    79: 401
    80: 409
    81: 419
    82: 421
    83: 431
    84: 433
    85: 439
    86: 443
    87: 449
    88: 457
    89: 461
    90: 463
    91: 467
    92: 479
    93: 487
    94: 491
    95: 499
    96: 503
    97: 509
    98: 521
    99: 523
    100: 541
    101: 547
    102: 557
    103: 563
    104: 569
    105: 571
    106: 577
    107: 587
    108: 593
    109: 599
    110: 601
    111: 607
    112: 613
    113: 617
    114: 619
    115: 631
    116: 641
    117: 643
    118: 647
    119: 653
    120: 659
    121: 661
    122: 673
    123: 677
    124: 683
    125: 691
    126: 701
    127: 709
    128: 719
    129: 727
    130: 733
    131: 739
    132: 743
    133: 751
    134: 757
    135: 761
    136: 769
    137: 773
    138: 787
    139: 797

    程序说明:

    1.需要创建一个包项目,包名为myprime

    2.需要定义一个结构,结构名为MyPrime,对象的变量放在结构体中

    3.定义若干方法,似乎方法名需要以大写字符开头

    4.主程序中的对象变量,照猫画虎即可("mp := new(myprime.MyPrime)"),需要用new

    5.有了对象,就可以调用方法了

    6.其他与面向对象编程类似




  • 相关阅读:
    1133catalan数二维变种
    HDU2254 奥运 矩阵应用
    hdu1134大数+catalan数
    C#编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出。
    简单工厂
    每日总结
    C#编写一个控制台应用程序,可根据输入的月份判断所在季节
    使用Java api对HBase 2.4.5进行增删改查
    C#编写程序,用 while 循环语句实现下列功能:有一篮鸡蛋,不止一个,有人两个两 个数,多余一个,三个三个数,多余一个,再四个四个地数,也多余一个,请问这篮鸡蛋至 少有多少个
    每日总结
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563556.html
Copyright © 2020-2023  润新知