-
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
提交
取消