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\n", 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.其他与面向对象编程类似




posted on 2017-07-30 23:31  海岛Blog  阅读(388)  评论(0编辑  收藏  举报

导航