浅学C++类
来源:互联网 发布:注册淘宝要拨打打电话 编辑:程序博客网 时间:2024/05/10 00:26
在网上搜索了C++类来学习,感觉学得不够,以后还是看书比较好...
第一次写博客,有不对的地方欢迎指教~
一、面向对象与面向过程
C++是面向对象的语言,C是面向过程的语言。面向过程要求进行解决问题的每一个步骤,而面向对象则要求将问题划割成不同对象,分清>他们的作用与各自之间的关系。
例如:对于一个五子棋游戏,面向过程应该思考这个循环:黑落子—绘制棋盘—检查是否胜利—白落子—绘制棋盘—检查是否胜利。</p><p> 而面向对象应该考虑 1.一个对象用于管理棋盘,2.一个对象用于判定输赢,3.一个对象用于落子。4.一个对象用于帮助
其实面向对象中应该也用到过程思维,因为三者需要按照一定次序进行,但这样更有利于明确分工。而这其中的区别应该就是通过类来表现的。
二、C++类
1.什么是类?
类是用来描述对象的,我觉得最棒的例子是wid(百度C++类,会有他的博客)提出的,对于人这个群体,有一些属性,比如姓名,年龄,身高,体重,职业等,有一些 能力,比如可以听写,可以制作工具。类中的属性就是上述属性,类中的方法就是上述能力。或者我的理解是:属性是int char 这些数据,而方法是实现功能的函数
2.C++类的定义方法
类,用class来定义,包括两种属性与方法:public与private,顾名思义,public中的属性与方法可以被其它类和方法调用,而private中的属性方法,只能供类中的属性方法 调用,具体的格式是:
class 类名{private:方法 属性public:方法 属性};
注意1).大括号后的分号。public 和 private可以多次使用。
2).如果定义的函数在类中,而它的内容写在类外,那么要这样写:函数类型 类名::函数名(参数){...}
3).不能对变量初始化。
3.类的实例化
上述只是定义了一个类,就像定义了结构体,但我们并没有创建相应的实体,实例化类用
类名 实体名称;
比如定义了human类,实例化就是 human a ;,在之后就可以使用a了
4.类的使用
使用的格式是实体名称.方法(或属性)
比如(相应的属性与方法均定义过)设置a的年龄为18
a.age = 18 ;
用a的翻译功能 ;
word2 = a.trans(word1) ;
三、实现五子棋(不带AI)
在实际写的过程中,我发现类的好处之一是不需要将一些数据作为参数传递,而可以直接访问;不用返回单个值,而可以直接改变类中的值达到目的。不过感觉还是以前的思考模式...也不知道领悟到面向对象没有。
下面就是代码喽~有错误还烦请指教
#include <iostream>#include<string.h>#include<stdio.h>#define EDGE 16 //棋盘大小,不大于26#define WHITE 2 //定义棋子样式 需要输入对应的ASC码 #define BLACK 1using namespace std;int retry = 1 ;int turn = 0 ; //黑0白1 class ini{ public: bool start(); void help(); void replay() ;};class map{ public : void showmap(char map[EDGE+1][EDGE+1]); //展示棋盘 char map[EDGE+1][EDGE+1] ;//储存棋盘 };class point{ public: bool setpoint(char a , int b , char map[EDGE+1][EDGE+1]); int x ; int y ;};class judge{public:bool win(char map[EDGE+1][EDGE+1] , int x , int y);void showwinner() ;private: int winner ; //1表示黑 ,-1表示白};int main(){ ini initial ; map board ; judge judger ; point p ; char line , bin[100] = {0} ; int row ; if(!initial.start())//帮助 initial.help() ;while(retry)//开始游戏 { retry = 0 ;for(int i = 1 ; i <= EDGE ; i++) for(int j = 1 ; j <= EDGE ; j++) board.map[i][j] = '.' ;p.x = 1 , p.y = 1 ;while(!judger.win(board.map , p.x , p.y)){ cin>>line>>row ; while(!p.setpoint(line , row , board.map )) { cout<<"Wrong location, please retry"<<endl ; cin>>line>>row ; } board.map[p.x][p.y] = turn ? WHITE : BLACK ; turn = (turn==1) ? 0 : 1 ; board.showmap(board.map);}judger.showwinner() ;retry = 0 ;//initial.replay() ;} system("pause") ; return 0;}bool ini::start(){ cout<<"If you need help, please input h, or you can start game by pressing ENTER\n"<<endl ; char flag ; flag = getchar() ; if(flag == 'h' || flag =='H') return false ; return true ;}void ini::help(){printf("Now we use %c to represent the black and %c to represent the white\n",BLACK,WHITE) ; cout<<"We will print the chessboard every time you input location where you want to set your chess,eg:G8"<<endl ;}void map::showmap(char map[EDGE+1][EDGE+1]){char out = 'A';printf(" ") ;for(int i = 1; i <= EDGE ; i++) printf("%c ",out++) ;printf("\n") ;for(int i = 1 ; i <= EDGE ;i++){printf("%2d",i) ; for(int j = 1 ; j <= EDGE ; j++) printf("%c ",map[i][j]) ; printf("\n") ;}}bool point::setpoint(char a , int b , char map[EDGE+1][EDGE+1]){if(a >= 'A' && a <= 'A' + EDGE - 1) y = a - 'A' + 1 ;else if(a >= 'a' && a <= 'a' + EDGE - 1) y = a - 'a' + 1 ;else return false ;if(b >= 1 && b <= EDGE) x = b ;else return false ;if(map[x][y] == BLACK || map[x][y] == WHITE) return false ;return true ;}bool judge::win(char map[EDGE+1][EDGE+1], int x , int y){if(map[x][y] == '.') return false ; int dire[2][4] = {{-1,-1,0,1},{0,1,-1,1}} , len , p , q ;for(int i = 0 ; i <= 3 ; i++){len = 1 ;int n = 1 ;p = x+dire[0][i] ;q = y+dire[1][i] ;while(map[p][q] == map[x][y] && p >= 1 && p <= EDGE && q >= 1 && q <=EDGE){len++ ;n++ ;p = x+n*dire[0][i] ; q = y+n*dire[1][i] ;}p = x-dire[0][i] ;q = y-dire[1][i] ;while(map[p][q] == map[x][y] && p >= 1 && p <= EDGE && q >= 1 && q <=EDGE){len++ ;n++ ;p = x-n*dire[0][i] ; q = y-n*dire[1][i] ;}if(len >= 5){if(map[x][y] == BLACK){winner = 1 ; return true ;} else{winner = -1 ; return true ;} }}return false ;}void judge::showwinner(){if(winner == 1) cout<<"The Black is winner"<<endl ;else cout<<"The White is winner"<<endl ;}
四、下一步的学习
下一步希望能了解继承的知识,有些参数或许就可以不用传递了。
- 浅学Objective-C 初始化方法
- 浅学JAVA类加载
- 浅学C++类
- Java Process类的浅学习
- Java Process类的浅学习
- Java Process类的浅学习
- Java Process类的浅学习
- Quartz浅学
- 浅学javascript
- 浅学Hibernate
- jQuery 浅学
- 浅学-MVC
- WindowsService 浅学
- 浅学python
- keras浅学
- Nginx浅学
- MySQL浅学
- 浅学CMake
- 也不知道require和AWK好不好用啊。。。
- 图片压缩
- opencv学习篇(6)mask操作
- UITableView横用
- Android WebService调用
- 浅学C++类
- Java 定时器的使用:每天定时执行任务
- 检测缓存文件是否超时
- 将一个json对象中所有的中文URL加密,不影响对象使用
- Html Mailto标签详细使用方法
- Android 开发中ClassNotFoundException的问题原因和解决方法
- Memcached的管理与监控工具--MemAdmin
- Dynamics CRM2013/2015 插件注册工具登录后无法显示assembly列表问题的解决办法二
- 归并排序