简介: 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;
}