面向对象(OOP)
米之炼金术师
动物界,脊索动物门,哺乳纲,灵长目,人科,人属,人种
展开
-
C++面向对象(十三):友元、内部类、局部类
C++面向对象(十三):友元、内部类、局部类文章目录C++面向对象(十三):友元、内部类、局部类友元内部类(嵌套类)局部类友元友元包括友元函数和友元类如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所有成员如果将类A声明为类C的友元类,那么类A的所有成员函数都能直接访问类C对象的所有成员友元破坏了面向对象的封装性,但在某些频繁访问成员变量的地方可以提高性能友元函数:#include <iostream>using namespace std;原创 2020-05-23 16:15:54 · 214 阅读 · 0 评论 -
C++面向对象(十二):隐式构造(转换构造)、编译器自动生成的构造函数
C++面向对象(十二):隐式构造(转换构造)、编译器自动生成的构造函数文章目录C++面向对象(十二):隐式构造(转换构造)、编译器自动生成的构造函数隐式构造(转换构造)编译器自动生成的构造函数隐式构造(转换构造)C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数#include <iostream>using namespace std;class Person { int m_age;public: Person () { cout <<原创 2020-05-23 16:12:51 · 483 阅读 · 0 评论 -
C++面向对象(十一):对象类型的参数和返回值、匿名对象
C++面向对象(十一):对象类型的参数和返回值、匿名对象文章目录C++面向对象(十一):对象类型的参数和返回值、匿名对象对象类型的参数和返回值匿名对象(临时对象)对象类型的参数和返回值使用对象类型作为函数的参数或者返回值,可能会产生一些不必要的中间对象作为参数时:#include <iostream>using namespace std;class Car {public: Car () { cout << "Car() - " << this &原创 2020-05-23 16:07:44 · 534 阅读 · 1 评论 -
C++面向对象(十):拷贝构造函数
C++面向对象(十):拷贝构造函数文章目录C++面向对象(十):拷贝构造函数拷贝构造函数调用父类的拷贝构造函数浅拷贝和深拷贝浅拷贝深拷贝拷贝构造函数拷贝构造函数是构造函数的一种当利用已存在的对象创建一个新对象时(类似于拷贝),就会调用新对象的拷贝构造函数进行初始化拷贝构造函数的格式是固定,接收一个 const 引用作为参数#include <iostream>using namespace std;class Car { int m_price; int m_length原创 2020-05-23 16:04:20 · 272 阅读 · 0 评论 -
C++面向对象(九):静态成员、const成员、引用成员
C++面向对象(九):静态成员、const成员、引用成员文章目录C++面向对象(九):静态成员、const成员、引用成员静态成员单例模式(一种设计模式,保证某个类永远只创建一个对象)const成员引用成员静态成员静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对象指针->静态成员)、类访问(类名::静态成员)静态成员变量的特点:存储在数据段(全局区,类似于全局变量),整个程序运行过程中只有一份内存(不会因为继承而创建多份)对比全局变量,它可以设定访原创 2020-05-23 15:59:21 · 450 阅读 · 0 评论 -
C++面向对象(八):命名空间、this的原理
C++面向对象(八):命名空间、this的原理文章目录C++面向对象(八):命名空间、this的原理命名空间命名空间的嵌套命名空间的合并this的原理命名空间命名空间可以用来避免命名冲突int g_age;void func() {};namespace NB { // 全局变量 int g_age; void func() {}; class Person { int m_age; public: Person() { cout << "NB这里的"原创 2020-05-23 15:56:26 · 304 阅读 · 0 评论 -
C++面向对象(七):对象的内存、内存布局与管理
C++面向对象(七):对象的内存、内存布局与管理文章目录C++面向对象(七):对象的内存、内存布局与管理对象的内存对象的内存布局内存管理内存空间布局函数代码在代码区的调用为什么需要堆空间?对象的内存对象的内存可以存在于3种地方全局区(数据段):全局变量栈空间:函数里面的局部变量堆空间:动态申请内存(malloc、new等)// 全局区Person g_person;int main() { // 栈空间 Person person; //堆空间,取决于Perso原创 2020-05-23 15:47:03 · 801 阅读 · 0 评论 -
C++面向对象(六):堆空间
C++面向对象(七):堆空间为了自由控制内存的生命周期和大小而使用堆空间的内存堆空间的申请和释放:malloc \ free (从C沿用下来的)new \ delete (C++新增)new[ ] \ delete[ ]注意:申请堆空间成功后,会返回那一段内存空间的地址。堆空间的内存不会自动回收,需要手动释放,所以申请和释放必须是1对1的关系,不然可能会存在内存泄漏。回收时,申请的多少就会回收多少。申请堆空间是有可能失败的,比如申请的空间太大了,堆空间给不了这么多(有原创 2020-05-23 15:36:30 · 400 阅读 · 0 评论 -
C++面向对象(五):多态
C++面向对象(十二):多态文章目录C++面向对象(十二):多态多态的要素父类指针、子类指针虚表虚析构函数纯虚函数多态是面向对象非常重要的一个特性同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果在运行时,可以识别出真正的对象类型,调用对应子类中的函数多态的要素子类重写父类的成员函数(override)父类指针指向子类对象利用父类指针调用重写的成员函数父类指针、子类指针class Person {public: int m_age;};class Stude原创 2020-05-23 15:34:06 · 122 阅读 · 0 评论 -
C++面向对象(四):指针访问对象成员的原理
C++面向对象(四):初始化列表、指针访问对象成员的原理文章目录C++面向对象(四):初始化列表、指针访问对象成员的原理初始化列表指针访问对象成员的原理初始化列表是一种便捷的初始化成员变量的方式只能用在构造函数中初始化顺序只跟成员变量的声明顺序有关#include <iostream>using namespace std;struct Person { int m_age; int m_height; /* Person(int age, int height)原创 2020-05-23 15:28:22 · 1291 阅读 · 0 评论 -
C++面向对象(三):继承、多继承
C++面向对象(三):继承、多继承文章目录C++面向对象(三):继承、多继承继承内存布局成员访问权限父类的构造函数多继承菱形继承继承继承可以让子类拥有父类的所有成员(变量 \ 函数),提高代码的复用性// 父类class Person {protected: int m_age;public: void run() { cout << "Person::run()" << endl; }};// 子类 class Student : public Per原创 2020-05-23 15:24:57 · 225 阅读 · 0 评论 -
C++面向对象(二):构造、析构函数
构造函数(Constructor)、析构函数(Destructor)文章目录构造函数(Constructor)、析构函数(Destructor)构造函数(Constructor)构造函数的互相调用析构函数(Destructor)构造、析构顺序构造函数(Constructor)构造函数(也叫构造器),在对象创建的时候回自动调用,一般用于完成对象的初始化工作函数名与类同名,无返回值,可以有参数,可以重载,可以有多个构造函数struct Person { int m_age; // 创建对象时自动原创 2020-05-23 14:59:56 · 294 阅读 · 0 评论 -
C++面向对象(一):类、封装、成员变量初始化
C++面向对象(一):类、封装、成员变量初始化文章目录C++面向对象(一):类、封装、成员变量初始化C++中的类声明和实现分离封装成员变量初始化C++中的类C++可以使用 class、struct 来定义类。class是C++特有的,C里面没有,至于为什么要保留sturct,大概是为了让开发者更顺滑的从C过渡到C++吧。#include <iostream>using namespace std;// struct Person {class Person {public:原创 2020-05-23 14:51:42 · 328 阅读 · 0 评论 -
面向对象(OOP)与面向对象设计(OOD)
面向对象的基本原则原创 2019-10-27 12:39:11 · 2666 阅读 · 0 评论