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

趣味 C++ 进阶

难度初级
时长 8小时 0分
学习人数
综合评分9.60
10人评价 查看评价
10.0 内容实用
8.8 简洁易懂
10.0 逻辑清晰
  • Coder 继承自 Staff class Coder : public Staff { };
    查看全部
  • 可以看到,在 C++ 默认的复制模式之下,两个对象中的 mem 指针指向了同一片内存。因为 C++ 默认的复制模式只会简单得把成员的值进行复制,面对这个 mem 指针,他只会把指针的值进行拷贝,最后的结果就是 mem 指针指向了同一片内存。 这种拷贝方式,被称之为浅拷贝
    查看全部
  • #include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { mem = (char *)malloc(20); name = _name; age = _age; printf("构造函数被调用\n"); } Staff::~Staff() { if(mem != nullptr){ free(mem); mem = nullptr; } printf("析构函数被调用\n"); } 代码块预览复制 在上面的代码中,在类中定义了一个指针,在构造函数中,通过 malloc 函数分配了一个 20 字节大小的堆内存,然后将这片堆内存的首地址赋值给了这个指针。在析构函数中,我们将这片堆内存释放掉。
    查看全部
  • 对象实例化的时候,会调用构造函数,而对象销毁的时候,就会调用析构函数。我们先来尝试写一个析构函数: Staff.hpp #include <string> class Staff { public: Staff(std::string _name, int _age); ~Staff(); public: std::string name; int age; }; 代码块预览复制 Staff.cpp #include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; printf("构造函数被调用\n"); } Staff::~Staff() { printf("析构函数被调用\n"); } 代码块预览复制 调用代码不改,然后再运行一下。我们发现,程序在调用了构造函数之后,又调用了析构函数。 我们之前讲过栈内存,这个对象是分配在栈上面的,实例化的时候,调用了构造函数,而紧接着,main 函数就要结束了,这个栈对象就自动销毁了,销毁的时候,就调用了析构函数。
    查看全部
  • 此外,构造函数是可以有参数的,我们常常用构造函数来进行初始化。例如,我们可以利用构造函数对 name 和 age 进行传值。 Staff.hpp #include <string> class Staff { public: Staff(std::string _name, int _age); public: std::string name; int age; }; Staff.cpp #include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; } 当然,对于有参数的构造函数,调用的时候只要传进去参数就行了。现在,我们可以创建一个名叫 “mooc”,29 岁的员工了。 #include <stdio.h> #include "Staff.hpp" int main(int argc,char **argv) { Staff staff("mooc", 29); return 0; }
    查看全部
  • #include <string> class Staff { public: Staff(); }; 可以看到,这里定义了一个和名称和类名相同,没有返回值的函数,这个函数称为构造函数。构造函数的特殊之处在于,他会在类实例化的时候被调用
    查看全部
  • 函数的重载 #include <string> class Staff { public: void FuncA(); void FuncA(int a); }; 这个类中,我们定义了两个函数,都叫做 FuncA,但是他们的参数不一样,一个没有参数,一个参数是一个 int 类型的变量。这种情况下,两个函数都是有效的。而在调用的时候,C++ 会根据调用者传入的函数自行匹配相应的实现。
    查看全部
  • 成员函数的重载是指在同一个类中,函数名字相同,函数参数不同的函数。
    查看全部
  • 尝试在类的外部调用 private 修饰的 FuncB 函数,就会发现编译器报错了。因为 private 修饰的函数只能在类中被其他成员函数调用,例如,可以在 FuncA 中调用 FuncB
    查看全部
  • 成员函数同样受到权限修饰符的限制
    查看全部
  • #include <string> class Staff { public: std::string name; int age; int PrintStaff(); }; 代码块预览复制 在头文件中,定义一个成员函数,这个成员函数的功能是打印雇员的信息。而这个函数的实现,是在 .cpp 文件里面实现的。 打开 .cpp 文件,先 include 头文件,然后用以下的代码对函数进行实现。 #include "Staff.hpp" int Staff::PrintStaff() { printf("Name: %s\n", name.c_str()); printf("Age: %d\n", age); return 0; }
    查看全部
  • protected 用来指定保护成员。一般是允许在子类中访问
    查看全部
  • public 用来指定公有成员。一个类的公有成员在任何地方都可以被访问。例如: class A { public: int a; int b; } 代码块预览复制 用 public 修饰的,在外部是可以访问的: int main(int argc,char **argv) { A a; a.a = 15; // 不会报错,因为成员变量是 public 的 return 0; }
    查看全部
  • private 用来指定私有成员。一个类的私有成员,不论是成员变量还是成员函数,都只能在该类的内部才能被访问
    查看全部
  • 权限修饰符:private,public
    查看全部

举报

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

微信扫码,参与3人拼团

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

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