zoukankan      html  css  js  c++  java
  • C++day08 学习笔记

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

  • 相关阅读:
    js实现倒计时
    CSS解决ul下面最后一个li的margin
    js手动定时清除localStorage
    js应用中的小细节-时间戳的转换和input输入框有效数字
    javaScript将string转换成array,并将汉字按汉语拼音排序方法
    CSS3属性之text-overflow:ellipsis,指定多行文本中任意一行显示...
    移动端下拉刷新,向后台请求数据
    进程 线程 协程
    网络编程
    flask 2 进阶
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/2622602.html
Copyright © 2011-2022 走看看