zoukankan      html  css  js  c++  java
  • 类的嵌套

    class1.h文件中:
    
    
    #ifndef CLASS1_H_
    #define CLASS1_H_
    #include <iostream>
    #include <string>
    class class1
    {
    public:
    class class2
    {
    public:
    class2();
    class2(const class2 & src);
    class2& operator = (const class2 & rhs);
    private:
    double class2Value;
    std::string mString;
    mutable int mNumber = 0;
    };
    
    class1();
    class1(double value);
    ~class1();
    private:
    double class1Value;
    }; 
    
    #endif //CLASS1_H_
    
     
    
    class1.cpp文件中:
    
    #include "class1.h"
    
    class1::class1()
    :class1Value(0.0)
    {
    
    }
    class1::class1(double value)
    :class1Value(value)
    {
    
    }
    class1::~class1()
    {
    
    }
    
    
    class1::class2::class2()
    :class2Value(0.0)
    ,mString("")
    {    
    mNumber++;
    }
    class1::class2::class2(const class2 & src)
    {
    mNumber++;
    class2Value = src.class2Value;
    mString = src.mString;
    }
    class1::class2& class1::class2::operator = (const class2 & rhs)
    {
    if(this == &rhs)
    {
    return *this;
    }
    class2Value = rhs.class2Value;
    mString = rhs.mString;
    mNumber = rhs.mNumber;
    return *this;    
    }
    
    这里注意的是:在定义赋值运算符是的限定符class1::class2& class1::class2::operator = (const class2 & rhs)十分不便;
    
    所以可以这样:
    
    使用类别名称重命名,这样容易管理,在.cpp文件最上边定义:using sClass = class1::class2;
    
    #include "class1.h"
    using sClass = class1::class2;
    class1::class1()
    :class1Value(0.0)
    {
    
    }
    class1::class1(double value)
    :class1Value(value)
    {
    
    }
    class1::~class1()
    {
    
    }
    
    
    sClass::class2()
    :class2Value(0.0)
    ,mString("")
    {    
    mNumber++;
    }
    sClass::class2(const class2 & src)
    {
    mNumber++;
    class2Value = src.class2Value;
    mString = src.mString;
    }
    sClass& sClass::operator = (const class2 & rhs)
    {
    if(this == &rhs)
    {
    return *this;
    }
    class2Value = rhs.class2Value;
    mString = rhs.mString;
    mNumber = rhs.mNumber;
    return *this;    
    }
    
     
    
     
  • 相关阅读:
    OpenCV中Mat,图像二维指针和CxImage类的转换
    opencv reduce()函数
    vc 6.0添加版本信息
    tesseract::TessBaseAPI api
    lnk1146 erro,solution
    LNK2001 error 解决方法
    Error LNK2038 mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'
    APP后台架构开发实践笔记
    从0到1 快速建一个区块链
    App 后台架构
  • 原文地址:https://www.cnblogs.com/boost/p/10331506.html
Copyright © 2011-2022 走看看