C++之内部类实现总结(二百三十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列【原创干货持续更新中......】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

1.前言

本篇目的:理解C++之内部类实现总结。

2.内部类实现介绍

<1>.嵌套类 (Nested Class)

嵌套类是定义在外部类中的类。内部类可以访问外部类的成员,而外部类也可以访问内部类的成员。嵌套类的作用域仅限于外部类,并且可以通过外部类名来访问。

<2>.作为外部类的成员 (Member Class)

内部类作为外部类的成员,可以直接访问外部类的成员。内部类对象的创建需要通过外部类对象进行。

<3>.本地类 (Local Class)

本地类是在函数内部定义的类,仅在该函数内部可见。本地类可以访问函数内部的局部变量,但是这些局部变量必须是静态变量或者是函数的参数。

<4>.静态内部类 (Static Inner Class)

静态内部类是在外部类中定义的静态类。它与普通静态类一样,不依赖于外部类的实例,可以直接通过外部类名访问。静态内部类不可以访问外部类的非静态成员。

<5>.继承内部类 (Inherited Inner Class)

继承内部类是创建派生类,继承自外部类的内部类。通过继承内部类,派生类可以直接访问内部类的成员,并且继承了内部类的所有特性。

3.应用实例

<1>嵌套类 (Nested Class)

cpp 复制代码
class OuterClass {
public:
    // 外部类的成员和方法...

    class InnerClass {
    public:
        // 内部类的成员和方法...
    };
};

int main() {
    OuterClass::InnerClass innerObj; // 创建内部类的对象
    // 调用内部类的成员和方法...
    return 0;
}

<2>作为外部类的成员 (Member Class)

cpp 复制代码
class OuterClass {
public:
    // 外部类的成员和方法...

    class InnerClass {
    public:
        // 内部类的成员和方法...
    };

    InnerClass innerObj; // 内部类作为外部类的成员

    void doSomething() {
        innerObj.someMethod(); // 调用内部类的方法
    }
};

<3>本地类 (Local Class)

cpp 复制代码
class OuterClass {
public:
    // 外部类的成员和方法...

    void someMethod() {
        // 本地类定义在方法内部
        class InnerClass {
        public:
            // 内部类的成员和方法...
        };

        InnerClass innerObj; // 创建内部类的对象
        // 调用内部类的成员和方法...
    }
};

<4>静态内部类 (Static Inner Class)

cpp 复制代码
class OuterClass {
public:
    // 外部类的成员和方法...

    static class InnerClass {
    public:
        // 静态内部类的成员和方法...
    };

    void doSomething() {
        InnerClass::someMethod(); // 调用静态内部类的静态方法
    }
};

<5>继承内部类 (Inherited Inner Class)

cpp 复制代码
class OuterClass {
public:
    // 外部类的成员和方法...

    class InnerClass {
    public:
        // 内部类的成员和方法...
    };
};

class DerivedClass : public OuterClass::InnerClass {
public:
    // 派生类的成员和方法...
};

int main() {
    DerivedClass derivedObj; // 创建派生类的对象,继承自内部类
    // 调用继承的内部类的成员和方法...
    return 0;
}

<6>.

cpp 复制代码
#include <cstdio>
//1.定义MPEG4Writer和其内部类.
class MPEG4Writer {
public:
  class Track;
};

//2.实现内部类Track
class MPEG4Writer::Track {
public:
  Track(){
    printf("xxx----------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
  void resetInternal(){
  printf("xxx----------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}
};

int main() {
  MPEG4Writer::Track *tk= new MPEG4Writer::Track();
  tk->resetInternal();

  delete tk;
  return 0;
}

<7>.

cpp 复制代码
#include <cstdio>
//1.定义MPEG4Writer和其内部类.
class MPEG4Writer {
public:
  class Track;
};

//2.实现内部类Track
class MPEG4Writer::Track {
public:
  Track();
  void resetInternal();
};

MPEG4Writer::Track::Track() {
  printf("xxx----------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}

void MPEG4Writer::Track::resetInternal() {
  printf("xxx----------->%s(), line = %d\n",__FUNCTION__,__LINE__);
}

int main() {
  MPEG4Writer::Track *tk= new MPEG4Writer::Track();
  tk->resetInternal();
  
  delete tk;
  return 0;
}
相关推荐
码客-ygluu2 小时前
一个通用游戏数据服务器
c++·架构
another heaven2 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
SomeOtherTime3 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
apcipot_rain3 小时前
C++转Java日记(10)
java·开发语言
总要学点什么4 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
YLCHUP4 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
思麟呀5 小时前
背包DP(01背包+完全背包)
c++·算法
Funlang6 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯
总要学点什么6 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium