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;
}
相关推荐
charlie11451419130 分钟前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
呜喵王阿尔萨斯36 分钟前
编程中的英语
c语言·c++
likeGhee1 小时前
python缓存装饰器实现方案
开发语言·python·缓存
whoarethenext1 小时前
使用 C++/Faiss 加速海量 MFCC 特征的相似性搜索
开发语言·c++·faiss
项目題供诗1 小时前
黑马python(二十五)
开发语言·python
慌糖2 小时前
RabbitMQ:消息队列的轻量级王者
开发语言·javascript·ecmascript
醇醛酸醚酮酯2 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
jioulongzi2 小时前
记录一次莫名奇妙的跨域502(badgateway)错误
开发语言·python
向阳@向远方3 小时前
第二章 简单程序设计
开发语言·c++·算法
Mr_Xuhhh3 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构