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