C++ 学习笔记day08

1、排序函数

  void order(int* p1, int* p2){

      if(*p1 > *p2){

          int temp = *p1;

          *p1 = *p2;

          *p2 = temp;

      }

   }

   voidsort (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)具体的数组要有具体的排序方法
        调用函数,当不知道函数名时,可以通过函数指针调用

   ==================================================

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

                 }

 

          }

   }                    

   ==================================================

                     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)调用函数
       创建一个类的对象,通过对象调用函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值