C++基础

本文介绍了C++的主要特点,包括它的面向对象特性、引用的概念和使用,以及函数的优化技术如内联函数、函数重载和参数默认值。还提到了字符串类型和哑元函数在C++中的应用。
摘要由CSDN通过智能技术生成

C++特点:

1. 在支持C语言的基础上,全面支持了面向对象的开发

2. 编程领域广泛,且功能强大

3. 为数不多的支持底层操作的面向对象语言

4. 在面向对象的编程语言中执行效率极高

面向过程和面向对象

面向过程的语言,关注的重点是‘算法’,这种思考方式更加接近于计算机的思考方式,优点是可以把控到每个细节,因此程序的执行效率高,同时也带来了开发效率低的缺点。

面向对象的语言,关注的重点是‘对象’,编程人员只需要站在更高层次去管理这些单元体,更加接近人类的思考方式,优点是开发效率高,但是执行效率低。

面向过程,是以“怎么解决问题”为核心

面向对象,是以“谁来解决问题”为核心

引用

理论

概念

引用与指针类似,但是使用更加简便,功能更加简单,可以认为引用是一个变量的“别名”,对引用的操作与直接操作变量完全相同

性质

1. 可以改变引用的变量值,但是不能再次成为其他变量的引用

2. 声明引用时,必须对即将声明的引用进行初始化操作

3. 声明引用时,初始化的值不能为空

4. 声明引用时,初始化的值如果是纯数值,需要给引用增加const关键字进行修饰,表示该引用是常引用,这样的引用不能改变其数值

5. 可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量

6. 可以对指针建立引用

7. 可以使用const对引用进行修饰,此时虽然不能直接改变信用的值,但是可以简介改变原变量的值

引用参数

1. 引用参数可以使参数传递的效率提高,原因是不会产生副本

2. 引用参数应该在能被定义为const的情况下,尽量定义const,以达到引用的安全性

实践

void add(int &num)//引用位于形式参数
{
    num++;
}

int main()
{
    int num=0;
    add(num);//实际参数传入函数的样式不受影响
    cout<<"num = "<<num<<endl;//输出num的结果受函数影响

    /**
      输出结果:num = 1
      */
    return 0;
}

字符串类型

理论

概念

string是c++内置的字符串类,因为使用方式与基本数据类型极为相似,因此很多小白会误以为string是c++中的基本数据类型,不要混淆,string类型的头文件为#include<string>

其次,string使用ASCII编码,只支持英文字符,不能使用中文字符

string内部集成了大量的字符串处理函数,在下面的实践中,将对重点的函数进行举例

实践

int main()
{
    string my_name="love Dog";//对字符串进行赋值操作

    for(char c:my_name)//逐行遍历string字符串
    {
        cout<<c;
    }
    cout<<endl;
    /**
      输出结果:love Dog

      */

    cout<<my_name[3]<<endl;
    cout<<my_name.at(3)<<endl;//注意:这两行的效果都是获取下标为3的数据
    //二者区别:前者取出元素效率更高,后者更为安全
    /**
      输出结果:e
      e
     * /
    return 0;
}

函数

内联函数

理论

内联函数的目的是取代宏定义函数,使用关键字inline放在函数定义的前面,可以将函数定制为内联函数

内联函数在编译时,会直接展开该函数体到主函数中进行编译,因此可以提升程序运行的效率,一般可以将长度较小,且不包含复杂控制语句的频繁调用函数声明为内联函数

注意:所有的成员函数默认为内联函数,无需手动使用inline进行修饰。

 实践

//由于内联函数和普通函数区别不大,这里就不做完整演示了
online int add(int num)//这便是内联函数
{
    ;
}

函数重载

理论

C++允许使用同一个函数名称定义多个函数,这就是函数重载,函数重载的前提是各个重载的函数之间参数不同(类型或者个数),与返回值无关

注意:除了上述普通函数支持重载之外,成员函数和构造函数等也支持函数重载,但是析构函数不支持函数重载

 实践

void add(int &num)
{
    num++;
}

void add(int &num01,const int &num02)//函数进行重载操作
{
    num01+=num02;
}

int main()
{
    int num01=1;
    int num02=3;

    add(num01);
    cout<<"num01 = "<<num01<<endl;

    add(num01,num02);
    cout<<"num01 = "<<num01<<endl;

    /**
      输出结果:num01 = 2
      num01 = 5
      */
    return 0;
}

参数默认值

理论

C++中允许给函数的参数设定默认值,在调用函数是,如果传入参数,则传入的参数会覆盖默认值,如果不传入参数,则使用默认值作为参数值

注意:向右原则,如果函数参数有多个,此时给某个参数设定了默认值后,其右边所有的参数都必须设定为默认值

当函数的参数默认值与函数重载同时使用时,非常容易导致二义性问题,二义性问题是指编译器无法做出两种情况的抉择,因此尽量不要同时使用函数重载和默认值

 实践

int add(int num=0)//函数进行默认初始化操作
{
    num++;
    return num;
}

int main()
{
    int num01=1;

    cout<<"add = "<<add()<<endl;
    cout<<"add = "<<add(num01)<<endl;

    /**
      输出结果:add = 1
      add = 2
      */
    return 0;
}

哑元函数

理论

如果一个函数的参数只有类型,没有名字,这个参数在函数体重无法使用,这样的参数被称为哑元,这样的函数被称为哑元函数

作用:

1. 区分重载函数

2. 保持函数的向前兼容性 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值