为了账号安全,请及时绑定邮箱和手机立即绑定

趣味 C++ 进阶

难度初级
时长 8小时 0分
学习人数
综合评分9.90
6人评价 查看评价
10.0 内容实用
9.7 简洁易懂
10.0 逻辑清晰
  • test

    查看全部
  • a是int型变量a的地址

    (char *)将int型指针(指向4个字节)转换成char型指针(指向一个字节)

    char *p声明一个char型指针变回量,答接受转换的地址。

    #include <stdio.h>

    int main()
    {
       int i = 0x1122;
       char * p = (char *)&i;
       if (p[0] == 0x22 && p[1] == 0x11) {
           printf("Little Endian\n");
       }
       else if (p[0] == 0x11 && p[1] == 0x22) {
           printf("Big Endian\n");
       }
    }

    查看全部
    1 采集 收起 来源:强者争霸

    2021-08-13

  • 运算符重载

    RMB.h

    class RMB { public:     RMB(int _yuan, int _jiao, int _fen);     ~RMB(); private:     int yuan = 0;     int jiao = 0;     int fen = 0; };

    RMB.cpp

    #include "RMB.h" RMB::RMB(int _yuan, int _jiao, int _fen) {     yuan = _yuan;     jiao = _jiao;     fen = _fen; } RMB::~RMB() { }

    为这个类写了些必要的部分之后,我们要完成一个功能,加法功能,1块9毛加2块3毛,用程序应该怎么写呢?我们可以添加一个 Add 函数,如下:

    RMB.h

    class RMB { public:     RMB(int _yuan, int _jiao, int _fen);     ~RMB();     RMB Add(const RMB & rmb); private:     int yuan = 0;     int jiao = 0;     int fen = 0; };

    RMB.cpp

    #include "RMB.h" RMB::RMB(int _yuan, int _jiao, int _fen) {     yuan = _yuan;     jiao = _jiao;     fen = _fen; } RMB::~RMB() { } RMB RMB::Add(const RMB & rmb) {     RMB rmbRes(0, 0, 0);     // 分     int f = rmb.fen + fen;     int f_ = f / 10;     rmbRes.fen = f % 10;     // 角     int j = rmb.jiao + jiao + f_;     int j_ = j / 10;     rmbRes.jiao = j % 10;     // 元     int y = rmb.yuan + yuan + j_;     int y_ = y / 10;     rmbRes.yuan = y % 10;     return rmbRes; }

    这样,我们就实现了一个 Add 函数,如果想要把两个人民币加起来,就可以这样用:

    int main(int argc,char **argv) {     RMB rmbA(1, 9, 0);     RMB rmbB(2, 5, 0);     RMB rmbC = rmbA.Add(rmbB);     return 0; }

    但是这样看上去好像有点别扭,事实上,在很多不支持运算符重载的语言里,我们都是这样干的。但是在 C++ 里,有一种更好的方式,可以把 + 号进行重载。

    我们可以把这个 Add 函数修改成 + 号的重载:

    RMB.h

    class RMB { public:     RMB(int _yuan, int _jiao, int _fen);     ~RMB();     // RMB & Add(const RMB & rmb);     RMB operator + (const RMB & rmb); private:     int yuan = 0;     int jiao = 0;     int fen = 0; };

    RMB.cpp

    #include "RMB.h" RMB::RMB(int _yuan, int _jiao, int _fen) {     yuan = _yuan;     jiao = _jiao;     fen = _fen; } RMB::~RMB() { } // RMB & RMB::Add(const RMB & rmb) RMB RMB::operator + (const RMB & rmb) {     RMB rmbRes(0, 0, 0);     // 分     int f = rmb.fen + fen;     int f_ = f / 10;     rmbRes.fen = f % 10;     // 角     int j = rmb.jiao + jiao + f_;     int j_ = j / 10;     rmbRes.jiao = j % 10;     // 元     int y = rmb.yuan + yuan + j_;     int y_ = y / 10;     rmbRes.yuan = y % 10;     return rmbRes; }

    在这样修改之后,使用的时候,我们就可以写出来更优雅的代码了。

    int main(int argc,char **argv) {     RMB rmbA(1, 9, 0);     RMB rmbB(2, 5, 0);     RMB rmbC = rmbA + rmbB;     return 0; }

    可以看到我们直接把两个对象用 + 号加了起来,这比之前使用函数看起来会好得多。

    在 C++ 中,有很多符号都可以重载,也有一些不能被重载。

    查看全部
    1 采集 收起 来源:运算符重载

    2021-07-31

  • #include <stdio.h>

    #include <stdlib.h>

    #include <iostream>



    const int arrLength = 20;   // 数组长度


    double* getStusGrade()

    {

        // 学生成绩数组

        double gradeArr[arrLength] = {

        60.5, 62.5, 67.5, 40, 50, 60, 70, 80, 90, 100,

        90.5, 12, 13.5, 84, 65, 76, 87, 88, 99, 20.5

        };


        // 堆内存上分配160个字节的内存空间 20×8个字节

        double* arrP = (double*)malloc(arrLength * sizeof(double));


        // 将栈内存上的数组数据添加到堆内存空间中

        for (int index = 0; index < arrLength; index++)

        {

            arrP[index] = gradeArr[index];

        }


        return arrP;

    }



    int main(int argc, char** argv)

    {

        double* ptr = getStusGrade();


        // 输出学生成绩

        for (int index = 0; index < arrLength; index++)

        {

            std::cout << "学生" << index + 1 << "的数学成绩是:" << ptr[index] << std::endl;

        }


        free(ptr);

        ptr = nullptr;


        return 0;

    }

    查看全部
    1 采集 收起 来源:强者争霸

    2021-07-30

  • Staff(const Staff & staff);//k拷贝一份类中某函数地址

    查看全部
  • *在不同地方的含义

    1、在定义指针中时,*为指针定义符

    2、在可执行语句指针之前,*为指针引用符

    3、别忘了还有运算符的作用

    &在不同地方的含义

    1、在定义变量中,&为引用定义符,且必须初始化引用。

    2、在可执行语句中,&为取址符


    如以上描述有误,欢迎批评指针!!!

    查看全部
  • 内存管理

    资源获得初始化原则(RAII)

    构造函数  创建资源

    析构函数  销毁资源


    查看全部
    0 采集 收起 来源:动态内存管理

    2022-03-01

  • +

    virtual int work(); 虚函数 该staff 类里也可实现

    virtual int  work()=0;纯虚函数,只声明,不实现。

    虚函数不能实例化对象。

    纯虚函数的类只能被继承,不能被实例化

    查看全部
  • 对象分配到堆上,new 用来分配对象,delete 用来删除对象。new 会返回一个指针,在使用完毕后,要通过 delete 把这个指针指向的地址释放掉。

      Staff * st1 = new Staff();
      // 记得释放
      delete st1;

    栈上实例化:

      Staff st1;
    查看全部
  • 函数指针funcp指向函数funcl;

    int (*funcP)(int a)=funcl;

    int 函数返回值类型

    funcP 指针名

    int a 函数输入值

    funcl  指针指向的函数


    int ret=(*funcP)(5);

    通过指针调用函数,将返回值赋给ret

     

    查看全部
  • #include <stdio.h>
    
    int main(int argc,char **argv)
    {
        int arr[] = {1, 2, 3, 4};
        int * p = arr;
        return 0;
    }
    *(p+2)

    等价于

    arr[2]

    查看全部
  • 普通变量用点,指针用箭头

    查看全部
  • 现在大部分的机器,都采用了小端字节序。但是在 IO 方面,则大部分使用大端字节序。例如,你要使用网络发送一个 int 类型的变量,要先把 int 转换成大端字节序,然后通过网络发送。

    大端字节序又被称之为网络细节序。

    查看全部
  • 要通过基类(父类)释放子类的对象,必须将父类的析构函数设置为virtual.

    查看全部
    0 采集 收起 来源:强者争霸

    2022-01-17

  • static int a

    定义静态变量

    查看全部
首页上一页123456下一页尾页

举报

0/150
提交
取消
课程须知
你需要具备基础的 C++ 语法知识,在学习本课程之前,建议先学习《趣味 C++ 入门》,快速认识 C++,熟悉 C++ 基本语法,更加快速入手进阶课程!
老师告诉你能学到什么?
在本门课程中,你将学习到:计算机存储数据的原理、指针的进阶、面向对象编程、内存管理技巧等 C++ 高级语法。在课程的最后,将带领大家使用 C++ 编写一个五子棋游戏,通过实践,加深理解,巩固学习成果。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!