设为首页 加入收藏

TOP

C++远征离港篇-学习笔记(三)
2018-10-21 14:12:24 】 浏览:142
Tags:远征 学习 笔记
{ int x = 3; int y = 5; int const &z = x; // z = 10; // z不能被改变 x = 20; cout << x << endl; system("pause"); return 0; }

mark

别名被限制上了不能修改,但是原变量是可以修改的。

函数中的const

因为可以保证传入函数内部的值不会因为误操作而修改原有值

3-2-6-constFunctionDemo/main.cpp

#include <iostream>
using namespace std;

void fun( const int &a,  const int &b);

int main(void)
{
    int x = 3;
    int y = 5;
    fun(x, y);
    cout << x << "," << y << endl;
    system("pause");
    return 0;
}

void fun( const int & a, const int & b)
{
    // 错误因为传入的值为const。不能进行修改。
    a = 10;
    b = 20;
}

mark

把const去掉,因为传入的是引用,所以原始值可以被修改。

而当const修饰之后,传入函数内部的值并不会修改原有值

关于const用法,以下错误的是:

A. int const a = 3; int *p = &a; // 
B. int a = 3; int const *p = &a;
C. int a = 3; int * const p = &a;
D. const int a = 3; int const &b = a;

B const 修饰*p C const 修饰 p D const修饰a的别名b
mtianyan:指针指向const修饰的变量时,应该是const int const *p = &a;

单元巩固

使用const关键字定义整型变量count,并定义指针p引用变量count。利用for循环打印count次Hello C++

3-4-C++-UnitDemo/main.cpp

#include <stdlib.h>
#include <iostream>
using namespace std;

int main(void)
{
    // 定义常量count
    const int count = 3;
    int const *p = &count;
    // 打印count次字符串Hello C++
    for (int i = 0; i < *p; i++)
    {
        cout << "Hello C++" << endl;
    }
    system("pause");
    return 0;
}

因为只对*p进行了const。因此可以让p指向其他地址。

c++函数新特性

函数参数默认值

void fun(int i, int j=5, int k=10); // j,k有默认值
void fun(int i, int j=6, int k); // 错误写法

有默认参数值的参数必须在参数表的最右端

声明写默认值,定义不建议写。 定义时写默认值有些编译器无法通过。

void fun(int i, int j = 5, int k = 10);

void fun(int i, int j, int k)
{
    cout << i << j << k;
}

使用时:

int main()
{
    fun(20);
    fun(20,30);
    fun(20,30,40);
}

无实参则用默认值,否则实参覆盖默认值

函数重载

前提: 在相同作用域下

两个条件:

  • 用同一个函数名定义的多个函数
  • 参数个数参数类型不同

demo代码:

int getMax(int x, int y, int z)
{
    //TO DO
}
double getMax(double x ,double y)
{
    //TO DO
}

思考:编译器如何识别重载的函数

实际的编译之后,名称+参数形成新的函数。来区分两个所谓的同名函数。

  • int getMax(int x, int y, int z) ->getMax_int_int_int
  • double getMax(double x ,double y) ->getMax_double_double

调用时,则根据实参类型和个数自动识别。

重载的好处:

  • 求几个数最大值,比如有时候求三个数有时候求5个数,有时候求整数,有时候求浮点数。不需要想名字,计算机帮我们决定。

内联函数

内联函数

主调函数调用普通函数有五个步骤:

  1. 调用fun(),2. 找到fun()的相关函数入口 3. 执行fun() 中的相关代码 4. 返回主调函数
  1. 主调函数向下运行其他代码直到结束。

内联函数会在编译时将函数体代码和实参代替函数调用语句。

  • 省掉了2和4步骤,会节省时间,尤其是循环调用。

内联函数关键字inline

inline int max(int a,int b,int c);

int main()
{
    int i =10,j=20,k=30,m;
    m = max(i,j,k);
    cout<<"max="<<m<<endl;
    return 0;
}

使用时和普通函数一样使用。代码展开后相当于代码粘贴进来。

mark

mark

思考: 为什么不所有地方都使用内联函数?

  • 内联编译是建议性的,由编译器决定
  • 逻辑简单(最好不要包含for循环等),调用频繁的函数建议使用内联
  • 递归函数无法使用内联方式。

内容总结

  1. 函数参数默认值: 实参覆盖默认值
  2. 函数重载: 名称相同,参数可辩 (个数类型)
  3. 内联函数: inline 效率高 有条件(1.逻辑简单,2.不能是递归)

C++函数特性代码演示

学习函数默认参数,重载,内联函数。

  • 函数参数默认值:

4-2-c++-functionDefaultParameter/main.cpp

#include <stdlib.h>
#include <iostream>
using namespace std;
void fun(int i=30, int j = 20, int k = 10);

int main(void)
{
    fun();
    fun(100);
    fun(100, 200);
    fun(100, 200, 300);
    system("pause");
    return 0;
}

void fun(int i, int j, int k)
{
    cout << i << "," << j << "," << k << endl;
}

mark

已传入的实参覆盖默认值,未传入的使用默认值。 默认值从右侧开始赋值,声明时赋默认值,定义时不要默认值。

函数重载

前提条件,函数在同一个作用域下,默认多个函数在同一个命名空间时。

当没有定义命名空间时,函数同名就默认是重载了。

4-2-C++-FunctionOverload/main.cpp

#include <stdlib.h>
#include <iostream&g
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇4-c++教程起航篇-学习笔记 下一篇函数调用方法之__cdecl与_stdcall

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目