zoukankan      html  css  js  c++  java
  • C++随笔(三)

    1.SStud 结构体

      SStud ss  =s2;//栈内拷贝构造

      SStud sss(s2);//栈内拷贝构造

      SStud *ps = new SStud(s2);//堆内的拷贝构造

      拷贝构造函数:

      只有一个构造参数是SStud &ss (指针),拷贝构造函数的特点是,只有一个参数而且类型是本类的对象的引用,ss实际是一个指针变量

    2.析构函数必须没有返回值,而且不能有参数

    一般构造了多少次,就会执行多少次析构

    在栈中申请的,当存在多个构造函数的时候,是先构造的后析构,后构造的先析构

    在堆中申请的要手动析构

    3.教学课件内容:

    §符号常量:
    •使用宏定义#define定义:      #define  LIMIT  100
    §C++提供了新的常量定义方式:
    •使用const  修饰符定义:      const int LIMIT=100;
    •该常量是类型化的,有地址,可以用指针指向这个变量,不能修改。
    •定义的变量是整数时,int可以被省略。
    •函数参数也可以用const说明,用于保证参数在函数内部不被改动。
    4.全局变量
    •若希望在局部变量的作用域内,使用同名的全局变量,可以在该变量前加上“::”。
    5.内联函数
    §在函数说明前,添加关键字“inline”,该函数被声明为内置函数(或内联函数)。
    •C++编译器使用内置函数体中的代码替代函数函数调用表达式,可以加快代码执行,减少调用开销。
    •内置函数在调用之前应进行完整的定义(不能只有声明)。
    •C++的内置函数与宏定义#define 具有相同的作用和相似的机理。
    •函数较长或调用太频繁时,不适合定义为内置函数。
    例如:
       
    #include <iostream.h>
    
    inline float circle(float r)
    {
        return 3.1416*r*r;
    }
    
    int main()
    {
        for(int i=1; i<=3; i++)
            cout << "r="<< i << "   area= " << circle(i) << endl;
    
        int x;
        cin >> x;
        return 0;
    }

    6.动态分配内存

    C++中使用运算符new 和delete

    §运算符 new 用于内存的分配:
    •p = new  type;
    §运算符 delete 用于释放已分配的内存空间:
    •delete p;
    •type是一个数据类型名,p是指向该数据类型的指针。
    •new从称为堆的一块自由存储区中为程序分配一块sizeof(type)字节大小的内存,该内存的首地址被存于指针p中。
       new和delete 都可以被重载,允许建立自定义的分配系统。
    例如
    1 int *p;
    2     p=new int(99);
    3     cout<<*p<<endl;
    4     delete p;
    为数组动态分配内存:
    •int *pi = new int[10];
    •… …
    •delete [ ]pi;
    使用new动态分配内存空间时,若没有足够的内存满足分配要求,new将返回空指针(NULL)
    7.引用
    引用的定义:
    •定义引用的关键字是“type &”,其含义是“type类型的引用”,此引用与type类型的对象或变量的地址相联系。例如  int i=5;  int &j=i; 它创建了一个整型引用,j是i的别名,i和j占用同一内存位置。
    §定义引用时,必须立即对它进行初始化,不能定义完成后再赋值。

    引用实际上是一种隐式指针,每次使用引用的变量时,可以不书写间接引用运算符,因而简化了程序。例如例题2-18。

    引用参数

    C++提供引用,主要的一个用途就是将引用作为函数的参数。

     1 #include <iostream.h>
     2
     3 int a[]={1,3,5,7,9};
     4
     5 int &index(int);
     6
     7 main()
     8 {
     9     index(2)=25;
    10     cout << index(2);
    11     cout<<"a[2]="<<a[2];
    12     return 0;
    13 }
    14
    15 int &index(int i)

    16 {
    17     return a[i];
    18 }
    引用返回值

    函数可以返回一个引用,其主要的目的是:将该函数用在赋值运算符的左边

    
    
     1 #include <iostream.h>
     2 
     3 int &max(int &num1,int &num2);
     4 int &min(int &num1,int &num2);
     5 
     6 main()
     7 {
     8     int num1, num2;
     9     cout <<"Enter the first number: ";
    10     cin>>num1;
    11     cout <<"Enter the second number: ";
    12     cin>>num2;
    13     max(num1, num2)=0;
    14     cout<<"
    After putting zero in largest, the numbers are ";
    15     cout<<"
    "<<num1<<" and "<<num2<<"
    ";
    16     cout<<"Now, please enter two more numbers. 
    ";
    17     cout <<"Enter the first number: ";
    18     cin>>num1;
    19     cout <<"Enter the second number: ";
    20     cin>>num2;
    21     min(num1, num2)=0;
    22     cout<<"
    After putting zero in smallest, the numbers are ";
    23     cout<<"
    "<<num1<<" and "<<num2<<"
    ";
    24 
    25     int x;
    26     cin >> x;
    27 
    28     return 0;
    29 }
    30 
    31 int &max(int &num1,int &num2)
    32 {    return (num1>num2)?num1:num2;    }
    33 int &min(int &num1,int &num2)
    34 {    return (num1<num2)?num1:num2;    }
    View Code
    
    
     1 #include <iostream.h>
     2 
     3 int &max(int &num1,int &num2);
     4 int &min(int &num1,int &num2);
     5 
     6 main()
     7 {
     8     int num1, num2;
     9     cout <<"Enter the first number: ";
    10     cin>>num1;
    11     cout <<"Enter the second number: ";
    12     cin>>num2;
    13     max(num1, num2)=0;
    14     cout<<"
    After putting zero in largest, the numbers are ";
    15     cout<<"
    "<<num1<<" and "<<num2<<"
    ";
    16     cout<<"Now, please enter two more numbers. 
    ";
    17     cout <<"Enter the first number: ";
    18     cin>>num1;
    19     cout <<"Enter the second number: ";
    20     cin>>num2;
    21     min(num1, num2)=0;
    22     cout<<"
    After putting zero in smallest, the numbers are ";
    23     cout<<"
    "<<num1<<" and "<<num2<<"
    ";
    24 
    25     int x;
    26     cin >> x;
    27 
    28     return 0;
    29 }
    30 
    31 int &max(int &num1,int &num2)
    32 {    return (num1>num2)?num1:num2;    }
    33 int &min(int &num1,int &num2)
    34 {    return (num1<num2)?num1:num2;    }


    结构名、联合名、枚举名都是类型名,在定义变量时,C和C++不同,例如

    enum bool {BOOL, TRUE};

    struct string

    {

    char * ptr;

    int length;

    };

    定义变量时,C++可以直接说明为:

    bool done;        string str;

    而在C语言中,必须写成:

    enum bool done;  struct string str;

  • 相关阅读:
    动态规划-石子问题
    动态规划-最长不下降子序列
    STL 二分查找
    动态规划-最长公共子序列与最长公共子串
    动态规划-背包问题
    高精度运算模板学习
    二叉树 | 根据前序、后序生成中序
    03.动画
    02.绘制函数
    01.hello world
  • 原文地址:https://www.cnblogs.com/lingxianxia/p/4432989.html
Copyright © 2011-2022 走看看