浅学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 ;}

四、下一步的学习

       下一步希望能了解继承的知识,有些参数或许就可以不用传递了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 十四岁尿血医生说是肾炎怎么办 吃肉反胃想吐怎么办 母牛排尿带血尿发烧怎么办 4岁发烧40度怎么办 狗狗拉肚子咳漱哮喘怎么办 拉肚子拉脱水人无力怎么办 孕中期拉稀拉水怎么办 吃坏肚子拉稀水怎么办 手上起小疙瘩疼怎么办 手上长东西很痛怎么办 七八十斤猪拉稀怎么办 宝宝扁桃体化脓反复发烧怎么办 骑单车后膝盖痛怎么办 孩子一运动就喘怎么办 小孩晚上咳嗽很厉害怎么办 1岁宝宝夜里咳嗽怎么办 咳嗽咳的胸疼怎么办 儿童又咳又喘怎么办 咳嗽咳到胸口痛怎么办 咳嗽咳得肋骨疼怎么办 孕妇咳嗽咳得胸口疼怎么办 怀孕偏左侧宫腔怎么办 晨起活动后咳嗽怎么办 运动后乳房坠痛怎么办 嗓子痒咳嗽怎么办夜间最为难受 小孩鼻炎引起的咳嗽怎么办 跑完800米喉咙痒怎么办 过敏源总ige高怎么办 一岁宝宝咳嗽喘怎么办 宝宝又咳又喘怎么办 3岁宝宝有痰怎么办 小孩又咳又喘怎么办 宝宝有点吼和喘怎么办 气管里呛了辣油怎么办 玩手机手抖该怎么办 紧张到手抖做不了事该怎么办 做什么事手抖怎么办啊 跳舞时不会提气怎么办 啤酒喝多了手抖怎么办 头撞了一下头疼怎么办 头撞了个包怎么办