• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
p-boost-q
博客园    首页    新随笔    联系   管理    订阅  订阅
类的嵌套
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;    
}

 

 

 

posted on 2019-01-28 19:34  p-boost-q  阅读(453)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3