49,C++(03)

来源:互联网 发布:蒋春暄 知乎 编辑:程序博客网 时间:2024/06/10 16:04

/*
达内学习 C++ day47 2013-11-7ss
*/
一,函数重载
   1,函数重载
    同一作用域,函数名相同,参数列表不同(个数,类型,顺序)
   2,原理
    编译器会根据函数名和参数列表生成新的调用名
   3,重载的好处
   4,跨编译器调用函数
    防止编译器改名
     extern "C"
二,哑元
   参数只有类型  没有名字   作用:向前兼容,区分函数
三 ,参数的默认值
   默认参数靠右,不要和重载冲突
四,内联函数
  inline void testfun();
   g++ *.cpp -O2
  代码量大,递归的不适合内联函数
五,c++ 内存分配
  new  delete
  new[] delete[]
  地位内存分配 char data[100] int* parr=new(data)int[25]
六,引用
  别名(必须初始化,且不可以修改引用) 类型& 别名 =变量
  做参数可以减少复制,修改函数外部的数据
  做函数的返回值,作为右值(必须确保调用完成后引用变量合法)
  const 引用
  引用和指针的区别?
  1,引用是变量的别名,指针是一个地址
  2,没有空引用,有空指针
  3,引用一旦初始化不能修改指向,指针可以
  4,有指针的指针  但是没有引用的引用
  5,没有因用的指针  但是有指针的引用
  6,没有引用的数组
  7,数组的指针作为函数参数是把数组的地址传入函数中,但是可以传数组的引用
   void printArrByRef(int (&data)[5])  //要写数组的个数, 数组类型是int [5]  被分开了  所以要加括号(&data)
七,c++之父,给程序员的建议
  1,少用宏,多用 const 和 enum 定义常量,使用 inline 代替带参宏 使用 namespace 避免命名冲突。
  2,变量随时用随时定义保证初始化
  3,多用引用
  4,尽量不用 malloc  多用 new  delete
  5,尽量多用const(行参是参数指针,引用)
  6,尽量不使用类型转换
   static_cast<转换的类型>(变量)
   dynamic_cast<转换的类型>(变量)
   const_cast
   reinterpret_cast
  7,string 代替char[] 和 char*
   8,面向对象编程。
//====================================================================
面向对象编程
一,对象
    对象是由其他对象构成的
    同一个类型的对象,可以接受相同的消息
  (可以调用相同的函数)
    描述对象类型的关键字 class
二,类  对象的关系
   客观世界  具体 ——> 抽象
   具体对象----抽象描述——>类(class)---实例化(计算机中描述)——>对象
  老虎---概念----虎类----class----内存----虚拟 老虎对象
 
 类是对具体对象的抽象描述,对象是对类在内存中的具体化(实例化)
三,类
 描述对象的特征:类的成员变量   主要特征  (数据)
 描述对象的功能:类的成员函数             (代码)
 类就是对数据 和 代码 更高层次的封装。
四,描述对象的类型  使用 struct
   Date
   特征:  int  year; int month ;int day;
  功能:  setDay()   showDay();
五,描述对象的类型 使用class
 Date
   特征:  int  year; int month ;int day;
  功能:  setDay()   showDay();
  struct 中的成员函数 和 成员变量默认是public的,class 中的成员函数 和成员变量 默认是私有(private)的
  public:修饰的成员在类内和类外都能访问
  private:修饰的成员只能在类内访问
  protected: 保护的,在类内和字类中可以访问,(为子类而生)】
六,要求写一个时间类
   特征:
        时: int  h
        分: int  m
        秒:  int  s
  功能:
       设置时间
       时间向前走秒
       显示时间
七,构造函数
  
  1,构造函数
  和类名 相同  没有返回值  在构建对象时自动调用一次
  作用是初始化对象(给成员变量赋值)
  系统会提供一个 公开的无参的构造函数,但一旦人为提供一个构造函数 则会覆盖掉系统提供的构造函数。
  2,一个对象创建的过程
  a,根据对象的类型 分配内存空间
  b,基本类型 不做操作,非基本类型 重复创建对象的过程
  c,调用构造函数
  3,构造函数的重载
   构造函数可以构成重载但是不要形成冲突
    可以通过参数的默认值  简化构造函数的个数
  4,构造函数 初始化参数列表
    有时候我们要在调用构造函数之前去给成员变量赋值
    逻辑需要
    编译器要求,  const 类型 和引用类型
  
    在构造函数的参数列表之后 构造函数实现体之前的区域
   class Emp
   {
       string name;
       int& age;
       const   double salary;
      public:
      //引用类型
      Emp(int& age):salary(1),age(age),name("sunyang")  //初始化参数列>    表
      {…… }
  5,this指针
    构造函数中  代表正在被创建的对象的地址
    成员函数中  this 代表指向当前对象的指针
    哪个对象调用 this 就指向谁
    区分参数和成员变量
八,把类的声明 和 实现分开
  头文件中对类类型的定义
  实现文件是对类型的实现
 1,写一个头文件 对类型定义
   成员变量的定义
   构造函数  成员函数的声明
 2,写一个实现文件  导入头我呢间 深处函数声明之外的部分
 3,写一个测试
 myTime类2


 

原创粉丝点击