2026/4/18 4:25:48
网站建设
项目流程
dede安装好后是模板怎么变成做好的网站,道可道在线设计平台,怎么查看域名网站的容量到期,郴州新网最新招聘一、嵌套类的基本概念与核心价值
1.1 什么是嵌套类#xff1f;
嵌套类是定义在另一个类内部的类#xff0c;其作用域被限制在外围类的作用域内。例如#xff1a;
代码语言#xff1a;javascript
AI代码解释
class Outer {
public:class Inner { // Inner是嵌套类嵌套类是定义在另一个类内部的类其作用域被限制在外围类的作用域内。例如代码语言javascriptAI代码解释class Outer { public: class Inner { // Inner是嵌套类作用域为Outer内部 public: void print() { std::cout Nested Class\n; } }; };关键特性嵌套类是独立的类型与外围类的对象无隐含关联即嵌套类的对象不持有外围类的this指针嵌套类可以访问外围类的public/protected静态成员非静态成员需通过外围类对象访问外围类对嵌套类的成员无特殊访问权限需遵循访问控制规则。1.2 为什么需要嵌套类逻辑内聚将与外围类强相关的辅助类如迭代器、状态处理器嵌套在外围类中使代码结构更清晰封装性嵌套类的作用域被限制在外围类内部避免与全局作用域的类名冲突接口简化用户只需关注外围类的公共接口嵌套类的实现细节被隐藏如std::vector::iterator。二、嵌套类的实现细节2.1 嵌套类的定义位置与访问控制嵌套类可以定义在外围类的public、protected或private区域其访问权限决定了外部代码能否直接使用该嵌套类外围类中嵌套类的位置外部代码能否直接使用嵌套类典型场景public是需通过Outer::Inner访问暴露辅助接口如迭代器protected否仅外围类的派生类可访问内部实现细节如基类的状态管理private否仅外围类内部可访问完全隐藏的辅助类如数据结构的节点示例代码语言javascriptAI代码解释class Outer { private: class PrivateInner { // 私有嵌套类外部无法直接使用 public: void privateFunc() { std::cout Private Inner\n; } }; protected: class ProtectedInner { // 保护嵌套类仅派生类可访问 public: void protectedFunc() { std::cout Protected Inner\n; } }; public: class PublicInner { // 公共嵌套类外部可通过Outer::PublicInner访问 public: void publicFunc() { std::cout Public Inner\n; } }; }; int main() { Outer::PublicInner obj; // 合法 obj.publicFunc(); // 输出Public Inner // Outer::PrivateInner obj2; 编译错误PrivateInner是私有嵌套类 // Outer::ProtectedInner obj3; 编译错误ProtectedInner是保护嵌套类 return 0; }2.2 嵌套在类模板内部的类模板嵌套类如果外围类是模板类嵌套类可以继承外围类的模板参数成为模板嵌套类。此时嵌套类的模板参数可以与外围类相同也可以独立定义。① 继承外围类模板参数的嵌套类语法嵌套类直接使用外围类的模板参数。代码语言javascriptAI代码解释template typename T class Container { public: class Iterator { // 嵌套类使用外围类的模板参数T private: T* ptr; // 指向T类型的指针 public: Iterator(T* p) : ptr(p) {} T operator*() { return *ptr; } }; private: T data[10]; };实例化规则当外围类ContainerT实例化为Containerint时嵌套类Iterator自动变为Containerint::Iterator其内部的T被替换为int。②独立模板参数的嵌套类嵌套类也可以定义自己的模板参数与外围类的模板参数无关。代码语言javascriptAI代码解释template typename T class OuterTemplate { public: template typename U // 嵌套类是独立模板有自己的参数U class NestedTemplate { private: T outerData; // 使用外围类的模板参数T U nestedData; // 使用自己的模板参数U public: NestedTemplate(T t, U u) : outerData(t), nestedData(u) {} void print() { std::cout Outer: outerData , Nested: nestedData \n; } }; }; // 使用示例 int main() { // 外围类实例化为OuterTemplatedouble // 嵌套类实例化为NestedTemplatestd::string OuterTemplatedouble::NestedTemplatestd::string obj(3.14, Hello); obj.print(); // 输出Outer: 3.14, Nested: Hello return 0; }2.3 定义嵌套类的成员嵌套类的成员函数、数据可以在嵌套类内部直接定义也可以在外围类外部定义需使用作用域限定符。①内部定义成员最常见的方式是在嵌套类的大括号内直接定义成员函数代码语言javascriptAI代码解释class Outer { public: class Inner { public: void func() { // 直接在嵌套类内部定义函数 std::cout Inner function\n; } }; };②外围类外部定义成员如果成员函数较长或需要分离声明与实现可以在外围类外部定义嵌套类的成员。此时需使用外围类::嵌套类的作用域限定。https://www.dongchedi.com/article/7599068364476138009https://www.dongchedi.com/article/7599068470462349886https://www.dongchedi.com/article/7599067387270480409https://www.dongchedi.com/article/7599067543835378201https://www.dongchedi.com/article/7599067028498399806https://www.dongchedi.com/article/7599070124205228606https://www.dongchedi.com/article/7599069668674339352https://www.dongchedi.com/article/7599068007016743448https://www.dongchedi.com/article/7599070019213394494https://www.dongchedi.com/article/7599065355512365630https://www.dongchedi.com/article/7599063966806983230https://www.dongchedi.com/article/7599061470437294617https://www.dongchedi.com/article/7599064155139998232https://www.dongchedi.com/article/7599061470437163545https://www.dongchedi.com/article/7599062590840750616https://www.dongchedi.com/article/7599062626613887513https://www.dongchedi.com/article/7599062023594705432https://www.dongchedi.com/article/7599062682519880254https://www.dongchedi.com/article/7599063057444274750https://www.dongchedi.com/article/7599061470487659033https://www.dongchedi.com/article/7599061470462542361https://www.dongchedi.com/article/7599062030691500568https://www.dongchedi.com/article/7599061161849619006https://www.dongchedi.com/article/7599061091108815422https://www.dongchedi.com/article/7599061161849979454https://www.dongchedi.com/article/7599059948085592601https://www.dongchedi.com/article/7599059421490381374https://www.dongchedi.com/article/7599060019090522686https://www.dongchedi.com/article/7599058337736770110https://www.dongchedi.com/article/7599055587703915033https://www.dongchedi.com/article/7599056179788120638https://www.dongchedi.com/article/7599055620049912345https://www.dongchedi.com/article/7599056967646593560https://www.dongchedi.com/article/7599056040453472792https://www.dongchedi.com/article/7599056669804429849https://www.dongchedi.com/article/7599056179788251710https://www.dongchedi.com/article/7599054663602029081https://www.dongchedi.com/article/7599055914209346072https://www.dongchedi.com/article/7599053952055165502https://www.dongchedi.com/article/7599054704853189144https://www.dongchedi.com/article/7599053320217018905https://www.dongchedi.com/article/7599053080273158681https://www.dongchedi.com/article/7599053320216789529https://www.dongchedi.com/article/7599053296518890046https://www.dongchedi.com/article/7599051988881523262https://www.dongchedi.com/article/7599050888820507161https://www.dongchedi.com/article/7598918434650702360https://www.dongchedi.com/article/7598917813595980313https://www.dongchedi.com/article/7598869588356907544