返回类内变量 求支招

lunatic7 2019-07-09 04:39:29
class Test
{
public:
Test(LPCTSTR lpStr) { Split(lpStr); }

Test(int Year, int Month, int Dat, int Status)
{
Copy(Year, Month, Dat, Status);
}

const Test& operator=(const Test& buf) { return Copy(buf); }

bool operator()(LPCTSTR lpStr) { return Split(lpStr); }

const Test& operator()(int Year, int Month, int Dat, int Status)
{
return Copy(Year, Month, Dat, Status);
}

operator LPCTSTR() { return _hName; }
operator int() { return _hStatus; }

Test() {}
~Test() {}
protected:
bool Split(LPCTSTR lpStr)
{
return true;
}

Test& Copy(const Test& buf)
{
return *this;
}

Test& Copy(int Year, int Month, int Dat, int Status)
{
return *this;
}
private:
char _hName[32];
char _hCountry[32];
int _hYear;
int _hMonth;
int _hDat;
int _hStatus;
};


//想法 Test是个结构体 用vector保存 可以直接创建 添加 修改 读取

//创建
Test hTest("张三,中国");
//添加 修改
hTest(2019, 7, 9, 1);
//Test tmp(2019, 7, 9, 1);
//hTest(tmp);

//返回某项 ??? _hName _hStatus
1. 变量改成公有属性
2.写函数返回
3.单独创建结构体

不知道还有什么高招没有 求学习
...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lunatic7 2019-07-09
  • 打赏
  • 举报
回复
引用 9 楼 gouyanfen 的回复:
我觉得你就用定义个私有struct,传出拷贝或传出引用,引用的话,性能上没有一点损失的,和用指针转成汇编其实是一模一样的,差别就是编译器自动转,还是你手动转


嗯呢,这个方法我去写下
gouyanfen 2019-07-09
  • 打赏
  • 举报
回复
我觉得你就用定义个私有struct,传出拷贝或传出引用,引用的话,性能上没有一点损失的,和用指针转成汇编其实是一模一样的,差别就是编译器自动转,还是你手动转
lunatic7 2019-07-09
  • 打赏
  • 举报
回复
引用 6 楼 gouyanfen 的回复:
[quote=引用 4 楼 lunatic7 的回复:]
[quote=引用 2 楼 gouyanfen 的回复:]
谢谢邀请,不是很明白你的意思,你是想返回私有成员变量吗?


对的 我想用我列出来的以外的方法 返回私有的某项[/quote]
你这个办法以外的?直接返回你私有变量的第一个指针,直接通过指针计算编移去或得你要的变量
private:
char _hName[32];
char _hCountry[32];
_nName 的指针 +sizeof(char)*32就是_hCountry
你自己的代码没必要,而且不是线程安全,我一般只有在无法修改代码的情况下用这种
上面说的struct的方法和你现在类的不冲突,只是编译器对变量的偏移标记的计算,性能上基本没有损失的,你可以测试一下[/quote]

嗯呢,除非是不可修改才用内存偏移的方法

最简单有效的办法就是 int GetData(){return data;}

但是 我的私有变量又满多的

用重载强转类型最多只能两个

所以我就来看看有啥奇术没


schlafenhamster 2019-07-09
  • 打赏
  • 举报
回复
char _hName[32];
char _hCountry[32];
int _hYear;
int _hMonth;
int _hDat;
int _hStatus;
写个 函数 :如
inline int Test::GetYear(){ return _hYear;}
gouyanfen 2019-07-09
  • 打赏
  • 举报
回复
引用 4 楼 lunatic7 的回复:
[quote=引用 2 楼 gouyanfen 的回复:] 谢谢邀请,不是很明白你的意思,你是想返回私有成员变量吗?
对的 我想用我列出来的以外的方法 返回私有的某项[/quote] 你这个办法以外的?直接返回你私有变量的第一个指针,直接通过指针计算编移去或得你要的变量 private: char _hName[32]; char _hCountry[32]; _nName 的指针 +sizeof(char)*32就是_hCountry 你自己的代码没必要,而且不是线程安全,我一般只有在无法修改代码的情况下用这种 上面说的struct的方法和你现在类的不冲突,只是编译器对变量的偏移标记的计算,性能上基本没有损失的,你可以测试一下
lunatic7 2019-07-09
  • 打赏
  • 举报
回复
引用 1 楼 走好每一步 的回复:
//返回某项 ??? _hName _hStatus
1. 变量改成公有属性
2.写函数返回
3.单独创建结构体


都可以,只是衡量下做法是否恰当就可以了。
个人建议结构体加函数

struct tagXXX
{
char _hName[32];
char _hCountry[32];
int _hYear;
int _hMonth;
int _hDat;
int _hStatus;
};

tagXX GetInfo()const
SetInfo(const tagXX & r)


其实我这本身就是个结构体 所以这个方法是我最不想用的 我想学习下还有没有其他方法
lunatic7 2019-07-09
  • 打赏
  • 举报
回复
引用 2 楼 gouyanfen 的回复:
谢谢邀请,不是很明白你的意思,你是想返回私有成员变量吗?


对的 我想用我列出来的以外的方法 返回私有的某项
gouyanfen 2019-07-09
  • 打赏
  • 举报
回复
主要是你是考虑性能,还是安全,还是什么其它因素方面,不可以直接返回变量的拷贝,方法都可以,只能根据你的需求来决定用那种方式
gouyanfen 2019-07-09
  • 打赏
  • 举报
回复
谢谢邀请,不是很明白你的意思,你是想返回私有成员变量吗?
走好每一步 2019-07-09
  • 打赏
  • 举报
回复
//返回某项 ??? _hName _hStatus 1. 变量改成公有属性 2.写函数返回 3.单独创建结构体 都可以,只是衡量下做法是否恰当就可以了。 个人建议结构体加函数 struct tagXXX { char _hName[32]; char _hCountry[32]; int _hYear; int _hMonth; int _hDat; int _hStatus; }; tagXX GetInfo()const SetInfo(const tagXX & r)

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧