C++ 快速入门指南

C艹.jpg

内联函数

C++提供了程序内联机制来减少函数调用的开销。在函数定义的返回值类型前面加一个inline关键字,“建议”编译器函数代码复制到程序中,避免函数调用。

using std::cout;
using std::cin;
using std::endl;


inline double cube(const double side){
   return side*side*side;
}

void testInlineFunction(){
   double sideValue;
   for (int i=1 ; i<=3 ; i++) {
       cout << "enter the side length of your cube:";
       cin >>sideValue;
       
       cout << "side=" << sideValue << "cube=" << cube(sideValue) <<endl;
   }
}

  • using std::cout;using语句使我们不用重复写std::前缀;或者使用using namespace std;代替。

引用以及引用形参

  • 两种传参方式是:按值传递和按引用传递。
  • 采用按值传递方式传参时,首先生成实参值的副本,然后将该值传递给被调函数。改变副本的值不会影响主调函数中实参的值。
  • 通过按引用传参,允许被调函数直接访问主调函数中的数据,允许被调函数有选择的修改主调函数中的数据。
  • 引用实参是其对应的函数调用中实参的别名。
  • 通过&来标记按引用传参

引用以和引用形参

int squareByValue(int number){
    return number *=number;
}

void squareByReference(int &numberRef){
    numberRef *=numberRef;
}

函数体内引用作为别名

int z = 3;
   int &z_alias = z;//int &z_alias;
   cout << "z= " << z << endl << " z_alias = "  <<  z_alias << endl;
   z = 7;
   cout << "z= " << z << endl << " z_alias = "  <<  z_alias << endl;

输出

z= 3
 z_alias = 3
z= 7
 z_alias = 7

并且为初始化的引用int &z_alias;会导致错误

Declaration of reference variable 'z_alias' requires an initializer

空形参列表

在C++中,可以用void指定也可以通过在括号内不写任何语句定义空形参列表。如下两个函数是等价的:

void print();
void print(void);

默认实参

  • 有些程序在多次调用一个函数时经常将相同的实参传递给某个形参,这种情况下,可以将该形参指定默认实参,即传递给该形参的默认值。
  • 当发生函数调用时,如果省略了对应位置上的实参值,则编译器就会重写该函数调用并将默认值作为实参插入到函数调用中,在执行被调函数时,以该形参的默认值进行运算。
  • 默认实参必须是函数形参列表中最右边的实参。
  • 应该在函数名第一次出现时指定默认实参--通常在函数原型中指定。
int boxVolume(int length = 1, int width = 1, int height = 1);

void testDefaultArgument(){
    cout << "default = " <<boxVolume() << endl;
    
    cout << "length  = 2 : " <<boxVolume(2) << endl;
    
    cout << "length  = 2 , width =3 : " <<boxVolume(2,3) << endl;
    
    cout << "length  = 2 , width =3 , height = 4 : " <<boxVolume(2, 3, 4) << endl;
}


int boxVolume(int length, int width, int height){
    return length*width*height;
}

一元作用域运算符

C++提供了一元作用域运算符,可以在含有与全局变量名的局部变量的域中访问该全局变量。

int number = 7;
void testUnaryOperation(){
    double number = 10.7;
    
    cout << "location number = " << number <<endl;
    
    cout << "gloable number = " << ::number <<endl;
    
}

输出

location number = 10.7
gloable number = 7

函数重载

  • C++中允许定义同名的函数,只要这些函数具有不同的形参集合即可(至少在形参类型或形参个数或形参类型的顺序上有区别)。这个功能称为函数重载。
  • 调用重载函数时,C++编译器通过检查函数调用语句中的实参个数、类型及顺序选择适当的函数。
  • 重载函数由函数的签名进行区分。
  • 编译器根据函数形参的个数与类型将每个函数标识符编码,以保证类型安全链接,从而确保可以调用适当的重载函数,也确保实参与形参类型一致。
void functionOverloading(){
   cout << square(7) <<endl;
   cout << square(0.5) <<endl;
}

int square(int x){
   cout << "integer : ";
   return x*x;
}

double square(double x){
   cout << "double : ";
   return x*x;
}

输出

integer : 49
double : 0.25

函数模版

重载函数用于对不同数据类型的程序逻辑执行相似操作。如果各种数据类型的程序逻辑和操作是完全相同的,那么使用函数模版可以更加简洁、方便的执行重载。

  • 所有函数模版定义均以关键字template开始,随后是用尖括号<>括起来的模版形参列表.
  • 模版列表中的每个形参(称为形式类型形参)前面都加关键字typenameclass。两者含义相同。
  • 形式类型形参是基本数据类型或用户定义类型的占位符
template <class T>
T maximum(T value1, T value2, T value3 ) {
    T maximumValue = value1;
    
    if (value2 > maximumValue) {
        maximumValue = value2 ;
    }
    
    if (value3 > maximumValue) {
        maximumValue = value3 ;
    }
    
    return maximumValue;
}

关于C++部分的下一篇应该是C++ 类与对象,有空再补吧~~~

demo链接🔗https://github.com/samtake/C-review

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,146评论 1 51
  • 3. 类设计者工具 3.1 拷贝控制 五种函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数拷贝和移...
    王侦阅读 5,896评论 0 1
  • #1.函数基础1.1 局部对象1.2 函数声明1.3 分离式编译 #2.参数传递2.1 传值参数2.2 传引用参数...
    MrDecoder阅读 3,746评论 0 1
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 10,438评论 0 14
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,128评论 0 5