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

趣味 C++ 进阶

难度初级
时长 8小时 0分
学习人数
综合评分9.60
10人评价 查看评价
10.0 内容实用
8.8 简洁易懂
10.0 逻辑清晰
  • const 修饰成员函数 const 修饰的成员函数不能修改任何的成员变量 class A { public: int aaa; int funcA() const { aaa = 20; // 这行代码会报错 return 0; } } 代码块预览复制 const 成员函数不能调用非 const 成员函数 class A { public: int aaa; int funcA() const { funcB(); // 这行代码会报错 return 0; } int funcB() { return 0; } }
    查看全部
  • const 修饰指针 const 修饰指针可以分为多种情况: 只有一个 const,如果 const 位*左侧,表示指针所指数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元 int aaa = 20; int bbb = 30; const int * constPoint = &aaa; constPoint = &bbb; *constPoint = 80; // 这行代码会报错 代码块预览复制 只有一个 const,如果 const 位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改 int aaa = 20; int bbb = 30; int * const constPoint = &aaa; constPoint = &bbb; // 这行代码会报错 *constPoint = 80; 代码块预览复制 两个 const,*左右各一个,表示指针和指针所指数据都不能修改 int aaa = 20; int bbb = 30; const int * const constPoint = &aaa; constPoint = &bbb; // 这行代码会报错 *constPoint = 80; // 这行代码会报错
    查看全部
  • const int a = 20; 代码块预览复制 则表示 a 是一个常量,你不可以在后续对其进行修改。因为 a 不可修改,所以在创建的时候就要对 a 进行赋值,不对其进行赋值则会报错。例如,下面的代码就会报错 const int a;
    查看全部
  • 正是由于 NULL 会导致这样的混乱,所以在 C++11 标准之后,C++ 标准委员会为 C++ 添加了 nullptr 关键字。我们可以将 NULL 赋值给一个普通变量,而 nullptr 却不能。 int a = nullptr; 代码块预览复制 这样是会直接报错的。 nullptr 只能赋值给指针,所以不会有 NULL 那样的问题。 所以,只要你的编译器兼容 C++11 标准,那么你应该使用 nullptr
    查看全部
    0 采集 收起 来源:C++ 中的空指针

    2021-07-21

  • 因为在 C++ 中,0 地址通常是被保护起来的,不可访问的。因此用 0 地址来指代这个指针哪里都不指,是可以的。但是这里面却存在一些问题。因为 NULL 就是 0,所以我们可以把 NULL 用在其他地方
    查看全部
    0 采集 收起 来源:C++ 中的空指针

    2021-07-21

  • 我们通过强制转换来指定 func 执行的是哪个。这个过程是在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息。 动态编联 除了静态编联之外,C++ 还支持动态编联。动态联编是指联编在程序运行时动态地进行,根据当时的情况来确定调用哪个同名函数,实际上是在运行时虚函数的实现。
    查看全部
  • 将一个指针的类型做成强转,然后调用 func 函数,就会发现, func 函数会随着被强转的类型的变换而变换,这种函数的关联过程称为编联。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。
    查看全部
  • 多态,就是子类和父类有一个共同的函数名,但实现的功能不一样,我们可以通过显式转换或隐士转换来调用到不同的功能函数。子类可以直接隐式的转换为父类,但要将父类转换为子类实现的函数,就要用显式的方式来实现
    查看全部
  • 我们其实可以把一个员工强行转化成程序员,但是这就有可能出问题,就如同我们把 long long 转成 int 就有可能出现问题。 int main(int argc,char **argv) { Coder * coder = new Coder(); Staff * staff = coder; // 隐式转换就可以 Coder * coder = (Coder *)staff; // 必须显式转换 return 0; }
    查看全部
  • 类之间也可以相互转换。类的转换主要是在父类和子类之间的转换。
    查看全部
  • long long a = 100; int b = (int)a; 这里是大类型转小类型,所以要显式转换。这种转换可能会损失精度,是需要我们程序员掌控的
    查看全部
  • 例如,我们可以把 int 转成 long long。 int a = 100; long long b = a; 代码块预览复制 由于是小类型转大类型,所以这里使用隐式转换就可以了。
    查看全部
  • int main(int argc,char **argv) { Child * obj = new Child(); Base * baseobj = (Base *)obj; baseobj->func(); delete obj; return 0; } 我们把这个 Child 指针强转成 Base 指针,结果会是父类的func结果
    查看全部
  • 在 C++ 中,对父类成员的权限,子类中可以进行重新的定义,这个定义就是通过继承时候写的public 来实现的。 可以看到,我们在上述程序中使用了 public 修饰符,那么父类中的成员函数和成员变量将会保持父类的权限。这种是使用最广泛的继承方式,我们把它叫做公有继承。
    查看全部
  • 除了具有 Staff 的所有内容之外,Coder 还有属于自己的动作,那就是写代码,我们就可以这样写: class Coder : public Staff { public: void code() { printf("Coding!!!\n"); } };
    查看全部

举报

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

微信扫码,参与3人拼团

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

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