<C/C++区别>-2018/01/03

/*
C/C++ 

区别  C++  包含C语言的全部语法和内容
                    C++  -->C +  类(面向对象)  +  库(一些函数什么的)

                    C语言 面向过程的语言  每一步分析过程  -->函数
                    C++  面向对象 (面向过程)

                    顾客  挑选商品  去购物台  付款   走人
                    收银员   统计价格   收钱  找零 

                    复杂的内容  很难 分析出每一步的步骤   

                    int fun(int x ,int y)   买东西  商品价格  重量就可以 //单个的价格  个数
   面向过程的弊端
       1.问题分析方向
          1.1 问题复杂的话 不好分析步骤
          1.2  问题中一个步骤可能会细化出多种具体步骤
        2.抽象 
            问题抽象化   有利于分析一系列相近的问题
        3.封装 
            全局变量/局部  传递参数 也可能会意外的修改数据 

1.布尔类型
    bool true  false   
    --> C语言 判断条件用真和假  0和1       C++  bool(C++的关键字)  true  真  false 假
    大小 bool类型 1个字节(最小单元是一个字节) 
2.引用 
     定义引用   相当于给变量取外号  绿坏坏 -->一个球 
                            作用     函数传递参数 
     类型 &外号=x;给x取个外号  使用引用和使用原变量是一样的  引用本身就是常量(定义的时候需要指定哪个变量)引用 指定之后不能修改
        关于内存 引用不占内存   比指针更有效率  
     变量名 关联了一块内存

    指针     C语言传递参数 

    指针使用使用需要判断 是否为NULL(是否合法)
    引用使用的时候不需要判断

    同一个变量可以有多个引用
    int x;
    int&ax=x;
    int &bx=ax;
    int &cx=bx;
    int &dx=x;
    ax bx  cx  dx都是x的引用

3.函数部分   重载 缺省 内联
    3.1 重载  C++允许函数同名   要求参数不同(个数不同 或者参数类型不同) 
                参数一样 不构成重载(返回值类型不影响)
                 参数个数不一样  构成重载
                 参数类型不一样 构成重载
                 顺序不一样 也构成重载
        作用  一个函数名对应多个函数体
    3.2 缺省  在定义的时候 给函数默认的初始值 调用可以省略参数(省略的参数用初始值赋值)
                缺省只能从右往左缺省
                缺省如果有函数定义和函数声明    声明 写了  定义就不用写
                注意 缺省和函数重载共用的二义性问题
    3.3内联
        关键字 inline  通过拷贝代码到函数内部 去节省函数调用的跳转时间
                    缺点 耗费内存
          内联 适用比较短的函数  简单的赋值  简单的语句
          函数调用  -->通过函数名 和参数去 调用对应的函数   函数之间的跳转需要时间  
          如果代码比较短  节省跳转的时间  
        
        内联函数 内联函数中的代码 拷贝到被调用的位置  如果这个内联函数调用了其他函数  不适用内联 
        不推荐使用内联的几种情况 1.循环中不能使用内联  2. 代码中有函数

          函数 存放在代码区

4.new delete
    C++申请内存的方式  //IMAGE 对象  可以使用malloc和free或者new和delete来申请内存
    申请存放四个int数据的数组
    int *p=new int[4];//申请四个
    delete[]p;//释放申请的数组空间
    double *q=new double;//申请一个
    delete q;//释放一个

    []中表示个数   ()赋值  {}赋值
*/
#include<iostream>//输入输出流    stdio.h
#include<cmath>//stdio.h-->cstdio    math.h-->cmath

using namespace std;//命名空间 
//===========2.引用
void fun1(int x)
{
    x = 3;
    cout << "调用了fun1" << endl;
}
void fun2(int* x)//指针传递参数 
{
    *x = 4;
    cout << "调用了fun2" << endl;
}
void fun3(int& x)//传入的是 引用  传递是实参的引用   
{
    x = 5;
    cout << "调用了fun3" << endl;
}
//===3.1重载
////void fun(int x);
//int fun(double x);
//void fun(int x, double y);
//int fun(int x);
//void fun(double y, int x);

//比如实现两个数字加法  int+int      double +double    float+float
//int +float 
int add(int x, int y)
{
    cout << "调用了int加int的函数" << endl;
    return x + y;
}
float add(float x, float y)
{
    cout << "调用了float加float的函数" << endl;
    return x + y;
}
double  add(double x, double y)
{
    cout << "double加double" << endl;
    return x + y;
}
//============3.2 缺省
bool compare(int x, int y, bool biger = true)//比较函数
{
    if (x > y)  return biger;
    else return !biger;
}
int fun(int x = 0, int y = 0, int z = 0)
{
    return x + y + z;
}
//=========3.3内联函数
inline int f(int x, int y){ return x > y; }//定义前面加inline
//避免出现二义性问题 
//int fun()
//{
//    return 3;
//}
int main()
{
    /*
    cout<<   输出  可以连续输出   如果是字符 加单引号  如果是字符串 加双引号 如果数字 直接写

    endl -->  end of  line  换行   (它会刷新输出缓冲区) 
    C++  不需要格式占位符  
    cin>>   输入  不需要格式占位符  可以连续输入     不要加endl
    */
#if 0//缺省
    int x, y;
    cin >> x >> y;
    getchar();
    if (compare(x, y,false))//默认比较x>y
    {
        cout << "x比y大" << endl;
    }
    else
    {
        cout<<"x比y小"<<endl;
    }
    fun();
    fun(10);
    fun(10,20);
    fun(20,30,40);
#endif
#if 0
    cout << add(1, 2) << endl;
    cout << add(2.3, 2.3) << endl;
    cout<< add(2.3f, 2.3f) << endl;
    getchar();
    int  x=0;
    int &a = x;//a是x的引用
    cout << &x << endl;
    cout << &a << endl;
    fun1(x);
    cout<<"x的值是"<<x<<endl;
    fun2(&x);//传入地址
    cout << "x的值是" << x << endl;
    fun3(x);
    cout<<"x的值是"<<x<<endl;
    int  y;
    fun3(y);//可以
    //pow()  7个函数重载函数 
#endif
#if 0
    bool flag =false;//定义一个bool类型 然后给他赋值
    cout << flag <<"\tbool类型大小"<<' '<< sizeof(flag) << endl;//打印
    int  x;
    int &ax = x;//这个位置给x取外号   后面用ax和用x是一样的
    ax = 33;//x=33;
    float y;
    double z;
    cin >> x >> y >> z;//输入
    //getchar();
    cout << x << y << z;//输出
    cout << x;
    cout << "hello world" << endl;
    cout << 1 << '\n' << 3.1415926 << endl;
#endif
    int *p = new int[4]{1, 2, 3, 4};
    cout << p[0] << p[1] << p[2] << p[3] << endl;
    delete[]p;
    double *q = new double(3.14);
    cout << *q << endl;
    delete q;
    //如果申请一个指针数组
    //int **pp = new int *[10];
    //申请二维数组
    //int(*pArr)[10] = new int[5][10];
    getchar();
    //scanf  
    return 0;
}


//今天的作业  用重载做  
//函数两个参数  第一个实参是一个int 或者double类型的数据 第二个是要申请的数组大小
//申请一个动态数组  赋值 打印  释放内存

//19期学号C++01_昵称       C++01表示C++第1次课
//作业 vipzuoye@163.com  发送运行截图和代码
//实现 功能  主函数调用这两个 函数  实现不同功能
//fun(2.3,10)-->申请一个doule数组  数组存10个元素  2.3存放到申请内存的第一个位置
//fun(3,20) -->申请一个int数组  存20个元素  3放到第一个位置

 

posted @ 2018-01-15 16:48  让优秀成为一种习惯  阅读(172)  评论(0编辑  收藏  举报