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;

原文地址:https://www.cnblogs.com/lingxianxia/p/4432989.html