1、排序函数

   void order(int* p1, int* p2){if(*p1 > *p2){int temp = *p1;*p1 = *p2;*p2 = temp;}}

   void sort (int *p , int len , int perLen , void (*pOrder)(void* , void*)){char* pt = (char*)p;for(int i = 0 ; i < len ; i++){for(int j = i ; j < len ; i ++){pOrder(pt+i*perLen , pt+j*perLen);}}}    

(1)将输入参数int* -> void*  (void* 可以存储任何类型的地址,可以通用 )
   (2)表示数组的第i个元素,事先要知道数组每个元素的大小(参数传入)
         i*perLen => 当不知道指针类型时,表示走一步,应越过的字节数
         p+i*perLen => 表示第i个元素的地址
   (3)具体的数组要有具体的排序方法
        调用函数,当不知道函数名时,可以通过函数指针调用

View Code

    ==================================================sort.h==================================================                     void sort( void * p , int len , int perLen ,void (*pOrder)(void * , void * ) );==================================================sort.cc==================================================void sort( void * p , int len , int perLen ,void (*pOrder)(void * , void * ) ){char* pt = (char*)p ;for( int i = 0 ; i < len ; i++ ){for( int j = i ; j < len ; j++ ){pOrder(pt+i*perLen,pt+j*perLen ) ;}}}                     

View Code

    ==================================================main.cc==================================================#include <iostream>#include "sort.h"using namespace std;void orderInt( void * p1 , void * p2 ){int * t1 = (int*)p1 ;int * t2 = (int*)p2 ;if( *t1 > *t2 ){int temp = *t1 ;*t1 = *t2 ;*t2 = temp ;}}struct Person{char name[ 40 ] ;int age ;int id ;} ;void orderByAge( void * p1 , void* p2 ){Person * t1 = (Person*)p1 ;Person * t2 = (Person*)p2 ;if( t1->age > t2->age ){Person t = *t1 ;*t1 = *t2 ;*t2 = t ;}    }void orderById( void *p1 , void* p2 ){Person* t1 = (Person*)p1 ;Person* t2 = (Person*)p2 ;if( t1->id > t2->id ){Person t = *t1 ;*t1 = *t2 ;*t2 = t ;}}void orderByName( void * p1 , void* p2 ){Person* t1 = (Person*)p1 ;Person* t2 = (Person*)p2 ;if( strcmp( t1->name , t2->name ) > 0 ){Person t = *t1 ;*t1 = *t2 ;*t2 = t ;    }}int main(){int ia[] = { 3,1,6,3,6,8,3,468,89 };sort( ia , 9, sizeof(int), orderInt );for( int i = 0 ; i < 9 ; i++ ){cout<<ia[i] <<" " ;}cout<<endl;Person pers[ 3 ] ;pers[0].id = 1 ;pers[0].age = 29 ;strcpy( pers[0].name , "liucy" ) ;pers[1].id = 2 ;pers[1].age = 28 ;strcpy( pers[1].name , "huxinzhe" ) ;pers[2].id = 3 ;pers[2].age = 26 ;strcpy( pers[2].name , "xuehailu" ) ;    sort( pers , 3 , sizeof(Person), orderByAge );for( int i = 0 ; i < 3 ; i++ ){cout<<pers[i].name <<","<<pers[i].age<<",";cout<<pers[i].id<<endl ;}sort( pers, 3, sizeof( Person) , orderById ) ;for( int i = 0 ; i < 3 ; i++ ){cout<<pers[i].name <<","<<pers[i].age<<",";cout<<pers[i].id<<endl ;}sort( pers , 3 , sizeof( Person ) , orderByName );for( int i = 0 ; i < 3 ; i++ ){cout<<pers[i].name <<","<<pers[i].age<<",";cout<<pers[i].id <<endl;}return 0 ;}

2、面向对象
   封装:对象表示
   继承:更好的代码重用
   多态
  
   对象的组成 : 属性   成员变量
                 行为   函数
                
   面向过程的表示方法:
       数据与函数分离,关系松散
       封装的作用,把数据和函数封装到一起,保证数据专用
      
  全局函数:在类外面的函数,要使用成员变量,要通过参数传进来
  成员函数:在类内,可直接使用自己类的成员变量

对于类的变量的初始化:

       Person p ;strcpy(p.name , "liucy");p.age = 23;p.speak();

对成员变量和成员函数的使用都要通过类的对象
 
  public 关键字,表示在其他地方可以使用
  默认是私有的,在main函数中不能使用
 
  成员变量和成员函数依赖于类的对象(实例)
 
  类型是对对象的描述
  对象是类型的实例
 
  对象自己的成员函数访问自己的成员变量 
 
  什么是类?类由什么组成?
  怎么使用类?及类和对象的关系?
  成员变量和成员函数归谁所有?
 
  面向对象的方法写程序
  (1)首先写一个类,描述对象
       用变量表示属性,函数表示行为
  (2)调用函数
       创建一个类的对象,通过对象调用函数

转载于:https://www.cnblogs.com/tangzhengyue/archive/2012/08/04/2622602.html

C++day08 学习笔记相关推荐

  1. tornado学习笔记day08-tornado中的异步

    概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...

  2. tornado学习笔记day07-同步与异步

    同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道 ...

  3. tornado学习笔记day06-应用安全

    应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 ...

  4. tornado学习笔记day05-访问数据库

    模板## 配置模板路径 这个在之前我们已经配置好了,可以参考前面的文章 settings = {# 就像upfile就没有,你写了也白扯'template_path': os.path.join(BA ...

  5. tornado学习笔记day04-执行顺序

    响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> N ...

  6. tornado学习笔记day03-响应输出

    write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html 而我们采用wri ...

  7. tornado学习笔记day02-进阶与提升

    整理基础工程 请看第一天的配置文件目录,搭建了一个框架的基础目录 Application settings debug 作用 可以设置tornado是否工作在调试模式下面,默认为false,即工作在生 ...

  8. tornado学习笔记day01-高并发性能web框架

    tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...

  9. JAVA:最基础部分的学习笔记

    课程是b站动力节点发布的,这篇文章范围是:开始到方法之前 day01课堂笔记(第一章 Java的开发环境的搭建) 1.常用的DOS命令 win+r (组合键):可以打开"运行"窗口 ...

最新文章

  1. 帝国cms栏目忘记设置为终极栏目怎么办?
  2. pixhawk commander.cpp的飞行模式切换解读
  3. 一个应用被部署到SAP云平台后,启动时打印的日志
  4. mysql时间函数总结_MySQL 日期时间函数常用总结
  5. 8086除法指令DIV,IDIV
  6. 担当大任者的九大特征
  7. python pptp链接_pptp-client连接设置
  8. mac远程linux的ide,Jupyter notebook在mac:linux上的配置和远程访问
  9. Java Collection接口详解
  10. python两个字符串数据可以复制吗_无论如何,是否要将Python pandas数据框中的单个数据中的数据复制到字符串或列表中以进行进一步处理?...
  11. php 强制输出数组,php怎么将对象强制转数组
  12. 【李宏毅2020 ML/DL】P79 Generative Adversarial Network | Tips for improving GAN
  13. viper4android 样本,【图片】大福利,ViPER4Android FX音效及超过200个精选脉冲样本(转)【华为荣耀3x畅玩版吧】_百度贴吧...
  14. WebService--了解wsdl文件
  15. Aspose for Maven 使用
  16. 软件测试理论、方法及流程
  17. springcloud阿里巴巴五大组件_阿里巴巴内部独家微服务全解手册已“重现江湖”大厂核心技术,你确定不了解一下?...
  18. WARNING: We noticed you're using the `useBuiltIns` option without declaring a core-js version.
  19. Mac版 微信 撤回消息拦截两种方法
  20. 利用zabbix监控网宿cdn的流量

热门文章

  1. SpringBoot分页组件PageHelper介绍及使用
  2. commit(), commitNow()和commitAllowingStateLoss()
  3. Hyper-V 3.0服务器虚拟化:打造坚固的云
  4. LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg
  5. 手把手教你设计交友网站【3】
  6. 程序员怎样练出倒三角身材
  7. [ Typescript 手册] JavaScript `Array` 在 Typescript 中的接口
  8. linux 汇编语言ldreq,请教一个中断句柄的问题 - ARM技术论坛-ARM嵌入式论坛-人气最火爆ARM学习论坛 - 21ic电子技术开发论坛...
  9. 日期的包装 java,Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类...
  10. python支持esc退出_听说你不会用mac电脑装Python?看了这篇文章,秒懂!