C++ :从C 到C++

目录

1. 引用

1.1 引用的性质

2. 赋值

3. 键盘输入

4. string 字符串类

5. 内联函数

6. 重装函数


1. 引用

引用从一定程度上讲是指针的平替,几乎被所有的面向对象编程所使用。引用相当于对某一目标变量起一个"别名"。

操作引用与操作原变量完全一样。

1.1 引用的性质

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

● 声明引用时,必须要初始化

● 声明引用时,不能初始化为null

● 声明引用的时候,初始化的值可以是纯数值,但是此时要是使用const关键字进行修饰,表示改引用为常量引用,这样的引用的值不可变。

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

● 可以对指针建立引用

● 可以使用const修饰引用,此时如果原变量的值改变,引用的值也会改变。


#include <iostream>

using namespace std;


int main()
{
    int a= 1;
    int b = a;  // 赋值

    // 引用  c是a的引用
    int &c = a; // c是a的引用 a,c的值跟地址一致
    int d = 3;
    c = d;  // 赋值3,不是引用,c还是a的引用
    c++;    // c++,a也跟着改变

    // 加const 可以引用常量,但是被引用的数值不能被改变
    const int &e = 10;
    // e++;  错误

    // 将变量引用的地址赋值给一个指针,此时指针的指向还是原来的变量。
    int *f = &c;  // f,g 同时指向A C
    int *g = &a;

    // 将变量引用的地址赋值给一个指针,此时指针的指向还是原来的变量。
    int *&h = f;

    // const修饰引用,此时如果原变量的值改变,引用的值也会改变。
    const int &aa = a;
    a++;

    cout << "引用的性质:" << endl;
    cout << "b = " << b << endl;
    cout << "a = " << a << " " << &a << endl;
    cout << "c = " << c << " " << &c << endl;
    cout << "d = " << d << " " << &d << endl;
    cout << "e = " << e << " " << &e << endl;
    cout << "f = " << f << " " << &f << endl;
    cout << "g = " << g << " " << &g << endl;
    cout << " " << endl;



    return 0;
}

2. 赋值

通常编程中使用=进行初始化赋值操作,C++新增了以下初始化赋值语法。

#include <iostream>

using namespace std;


int main()
{
    int a(1);   // int a = 1;
    cout << a << endl;

    int b(a);   // int b = a;
    cout << b << endl;

    int c(a+b); // int c = a+b;
    cout << c << endl;
    return 0;
}

在C++11中对上述写法又进行了升级

#include <iostream>

using namespace std;


int main()
{
    int a(1);
    cout << a << endl;
    double b = 3.14;
    int b1 = b;
    int b2(b);
    int b3{b};  // 升级:对数据窄化提出警告

    cout << b << endl;
    cout << b1 << endl;
    cout << b2 << endl;
    cout << b3 << endl;

    return 0;
}

3. 键盘输入

可以使用 cin 把用户在命令行中输入的内容赋值到变量中。

cin 与 cout一样,都属于头文件 iostream 中标准输入输出流。

不带空格的输入:

#include <iostream>

using namespace std;


int main()
{
    int a;

    // C++ 的字符串string
    string str;
    cout << "请输入一个数字和字符串" << endl;
    cin >> a >> str;    // 接收键盘输入, 一个整数和一个字符串,可以连续操作

    cout << a << " " << str << endl;

    return 0;
}

如果cin输入的字符串包含空格,则可以使用下面的方式:

getline(cin,str);

带空格的输入:

#include <iostream>

using namespace std;


int main()
{
    // C++ 的字符串string
    string str;
    cout << "请输入字符串,可以包含空格,输入完成后点击回车" << endl;
    getline(cin,str);
    cout << "您输入的内容是:" << endl;
    cout << str << endl;

    return 0;
}

4. string 字符串类

string不是C++的基本数据类型他是一个C++标准库中的字符串类,使用时需要包含头文件#include<string>而不是string.h

string在绝大多数情况下可以代替C语言中的字符串,不必担心内存足够或者字符串长度的问题,其中内部还包含了很多字符串处理函数,可以完成各种情况下的字符串处理。

string和C语言相同,字符串编码使用ASCII编码,不支持中文处理。

size() 与 length() 结果相同

str[5] 与 str.at(5) 结果相同,但是c++中更推荐使用 .at,原因是at函数更安全,但是[]的方式效率更高.

#include <iostream>

using namespace std;

int main()
{
    string str = "helloworld";
    cout << str.size() << endl; // 10
    cout << str.length() << endl;   // 10

    cout << str[5] << endl; // w
    cout << str.at(5) << endl;  // w

    // cout << str[100] << endl;   // 输出一个越界数据
    // cout << str.at(100) << endl;  // 程序运行停止

    return 0;
}

string 支持多种遍历方式

  • 普通循环以for循环为例)
  • C++11for each 循环
#include <iostream>

using namespace std;

int main()
{
    string str = "helloworld";
    // 以for循环的方式进行输出字符串
    for(unsigned int i = 0; i < str.size(); i++)
    {
        cout << str[i];
    }
    cout << endl;

    // 以for each的方式进行循环遍历字符串
    for(char i: str)
    {
        cout << i;
    }
    return 0;
}

5. 内联函数

内联函数用于取代C语言中的宏定义的函数。内联函数的正确使用可以提升程序的执行效率。内联函数在编译的时候,直接把函数体展开到主函数中进行编译,在运行期间减少调用的开销。

通常将具有以下性质的函数写为内联函数:

        ● 代码长度5行以内

        ● 不包含复杂的控制语句

        ● 频繁的被调用

关键字:inline

后续学习的成员函数默认添加inline修饰。

但是我们手动添加上的inline关键字,将函数声明成内联函数。这个不是我们可以决定的。编译器有自己的判断准则,我们只是给编译器提一个建议。具体是否变成内联函数,还是编译器自己决定的。

#include <iostream>

using namespace std;

// 内联函数
inline void print_string(string str)
{
    cout << str << endl;
}

int main()
{
    print_string("helloworld");

    return 0;
}

6. 重装函数

C++中允许多个函数使用同一个名称,这种用法就是函数重载。

函数重载要求函数名称相同,但是参数不同(类型或者数量、顺序)不同。与返回值等其他因素无关。

#include <iostream>

using namespace std;


void printf_show(int i)
{
    cout << "调用了函数1 int " << " " << i << endl;
}

//  错误:参数类型一样,无法重载
//void printf_show(int i)
//{
//    cout << "调用了函数2" << endl;
//}

//  错误:虽然返回值类型不一样的,但是参数类型一样,无法重载
//int printf_show(int i)
//{
//    cout << "调用了函数3" << endl;
//}

void printf_show(string i)
{
    cout << "调用了函数4 string " << " " << i << endl;
}

void printf_show(double i)
{
    cout << "调用了函数5 double " << " " << i << endl;
}

void printf_show(char i)
{
    cout << "调用了函数6 char " << " " << i <<  endl;
}


int main()
{

    printf_show(5);
    printf_show("hello");
    printf_show(5.5);
    printf_show('a');


    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值