<C++ - 面向对象> 2018-01-08

 

/*
    回顾上一节的内容:   stdio  标准输入输出  std 标准   stdlib
            1.命名空间  std
                定义  namespace
                使用里面的变量或者函数   3种方式

            2.命令行参数  主函数的参数int char*[]   怎么利用传进来的参数  怎么传递参数

            3.stdafx.h  预编译头文件  提示要写就写上 放在开头
                    TCHAR  和char 多字节下没区别
                    图形库中一些函数  多字节
                    mciSendString
                    PlaySound
        新内容:
            类和对象:
                万物皆可为对象

                面向过程:更关心的是过程  ->  函数
                        fun(int x) 数据传入函数    例如:eat(danny,rice);
                面向对象:更关心的是对象    这个事情分配给谁做
                    例如:danny.eat(rice);

        1.类  抽象  -> 并不是真正存在   属性(数据 颜色(RGB值) 花瓣数目 气味 种类 形状) 行为(开花 结果 被看)

        2.对象  -> 张思家的第一朵挑花 -> 粉红色  5

        例如:
            人类 ->身高 体重 年龄 ....  行为(吃饭 睡觉 跳一跳 社交....)

            未来 -->具体的身高 体重 年龄  

    生活/需求中 -->抽象出一个类  --->写代码

   构造自己的对象  抽象过程
        做游戏  跳一跳  人 -> 跳的距离  准备的时间  跳的路径  准备过程


    // 语法部分:
    
    C语言的结构体

    C++的类和C++的结构体很像   **类就是私有的结构体   结构体就是公开的类


    数据 --> 就用结构体
    有属性 有行为 -->用类

 C++结构体:
        1.定义变量的时候不用加:struct
        2.结构体里面可以写函数

 类的关键字: class

 面向对象:  抽象 封装  继承  多态
        封装  -->访问权限
        public   公有的  所有人都可以访问
        private  私有的  自己内部的成员函数才可以访问
        protected 受保护的(现在当成私有)

    类 -    > 默认私有  
    结构体 -> 默认公有

    一般成员变量  私有
    成员函数  公有
    1.私有成员怎么赋值   内部的成员函数赋值
    2.外部的函数  不能够访问内部的私有成员变量

 总结:
    1.访问权限  C++中有
    2.结构体/类  里面的有函数  -->也是C++才有 -->C++结构体里面才可以有函数
    3.结构体是公有的类   类是私有的结构体
    4.类外定义的函数

    通过对象访问  类中的函数

    多文件 -->类 一般写在.h中   函数在类中声明
            类的函数的实现 写在cpp中

 ::类名  命名空间   域名解析符
        
    每个对象中会有一个 this 指针  指针指向对象本身
    形参 和成员不重名   可以不用 this
*/
#include <iostream>

//====================================复习上节的内容============================================
 using namespace std;   // PLAN  A
//using std::cout;    // PLAN  B
//using std::endl;
//========================================新内容================================================
 struct student
 {
     char name[20];    // 名字 (数据)
     char ID[10];      // ID
     int age;          // 年龄
     int lenth;        // 
     //...
     void playGame(){ cout << "回家咯 !" << endl; }  // 成员函数
 }; // 定义类型
//==========================================类=================================================
 class human
 {
 private:    // 私有的
     char name[20];  // 成员变量
     int age;
     char gender;
 public:     // 公有的
     // 成员变量
     //char name[30];    // 名字
     //int age;          // 年龄
     void eat()        // 成员函数
     {
         cout << "吃饭" << endl;
     }
     void Init(char name[], int age, char gender)
     {
         //(*this).name = name;
         this->age = age;
         this->gender = gender;
     }
     void setMessage()   // 类中的成员函数  访问类中的成员变量
     {
         cin >> name;
         cin >> age;
         cin >> gender;
     }
     void print()
     {
         cout << "名字:" << name << "\t年龄:" << age << "\t性别:" << gender << endl;
     }
//============================================类外定义函数=======================================
     void play();   // 函数声明
     void iniAge(int age)
     {
         age = 3;   // 形参赋值
         this->age = age;
         //(*this).age = age;
     }
 };
 void human::play()  // human 类  不是具体对象  不能用.
 {
     cout << "跳一跳" << endl;
 }

//========================== =============主函数=================================================
int main()
{
#if 0    // 复习上节内容
    //cout << "hello world!" << endl;
    std::cout << "hello world" << std::endl;   // PLAN  C

#elif 1   // 新内容
    student danny;   // 定义结构变量 (可以不加:struct)
    danny.playGame();

    human booby;   // human类对象 [定义类名(对象)]
    booby.eat();   // 不可访问
    booby.setMessage();
    booby.print();
    booby.play();
#endif
    getchar();
    return 0;
}
/*
    作业: 创建一个人类   用类写
        需要性别 年龄 还有名字  婚姻状态

        判断两个人能否结婚
        
        1.年龄 男方 满22 女方满20才能结婚
        2.结婚的不能结婚

        小明 20 男 未婚
        小李 22 女 未婚
        小广 33 男 未婚
        .......

        任选两个 
        类中写上一个函数 判断两个人能否结婚

        PS附加题  如果不能结婚 打印不能结婚的原因

        提示: 成员变量可以使用公有
*/

 

测试代码:(贪吃蛇)

/** 
    贪吃蛇
    分析:蛇头  蛇身 -->数据 -->坐标  方向  一个指针(结构体)

    蛇行为:吃食物(加长)  移动(转向)  撞墙/吃自己 -->死亡
            速度 调节 
            
            画图
*/
#include <iostream>
#include <graphics.h>
using namespace std;

//=========================================枚举============================================
enum dir
{
    up,down,left,right
};
//========================================结构体===========================================
struct body
{
    int x, y;  // 蛇身坐标
    dir direct;   // 方向
    body*next;    // 指针
};
//==========================================类============================================
class Snake   // 贪吃蛇  
{
private:  // 私有的
    body head;   // 结构体变量 /类的一个成员
    int x, y;    // 食物坐标
public:   // 公有的
    void eat()   // 吃食物
    {
        // 先判断  有没有吃到食物        食物坐标 --> 
        // 吃到之后  生成一个新的食物
        if (head.x == x&&head.y == y)
        {
            body*p = new body;   // 申请内存  (新的蛇身)
            p->direct = head.direct;   // 方向
            p->next = head.next;
            p->x = head.x;
            p->y = head.y;
            head.next = p;      // 新的蛇身串到蛇头后面
            // 蛇头往前移动一格
            // 生成新的食物
            food();   // 在一个成员函数中调用另外
        }
    }
    void food()  // 生成一个食物函数
    {
        /**
            随机数生成一个食物
            .....    
        */

    }
};


int main()
{

    return 0;
}

 

posted @ 2018-01-22 19:07  让优秀成为一种习惯  阅读(148)  评论(0编辑  收藏  举报