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;
}
相关推荐
wangbing11252 分钟前
踩坑:el8应用装在el9上
开发语言·后端·ruby
Andya_net44 分钟前
Java | Java内存模型JMM
java·开发语言
froginwe111 小时前
SQL LIKE 操作符详解
开发语言
182******20831 小时前
2026年java后端还有机会吗?还能找到工作吗?
java·开发语言
kyriewen111 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
CSCN新手听安1 小时前
【Qt】Qt窗口(八)QFontDialog字体对话框,QInputDialog输入对话框的使用,小结
开发语言·c++·qt
tumu_C2 小时前
用std::function减缓C++模板代码膨胀和编译压力的一个场景
开发语言·c++
BT-BOX2 小时前
Matlab 2025B下载安装教程
开发语言·matlab
Hical613 小时前
C++17 实战心得:那些真正改变我写代码方式的特性
c++
programhelp_3 小时前
Pinterest OA 题库大公开|Programhelp 独家整理(最新高频)
java·开发语言