成员模板有点迷惘?请大虾指点.

allen_zhaozhencn 2003-10-29 08:45:30
template<class T> class complex
{
private:
T m_data;
public:

complex(const T& data):m_data(data)
{
;
}

//成员模板,此处的模板定义与父模板有何关系?

template<class T1> complex(const complex<T1>& source_object)
{
m_data=source_object.m_data ;

//m_data不能被访问,对象不能调用类的私有成员?WHY?

}
};

void main()
{
complex<int> test1(1);
complex<double> test2=test1;

}



...全文
21 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2003-10-30
  • 打赏
  • 举报
回复
template<class T> class complex
{
friend class complex;// 加上这里一句就可以了
private:
T m_data;
public:

complex(const T& data):m_data(data)
{
;
}

//成员模板,此处的模板定义与父模板有何关系?

template<class T1> complex(const complex<T1>& source_object)
{
m_data=source_object.m_data ;

//m_data不能被访问,对象不能调用类的私有成员?WHY?

}
void Trace()
{
cout << m_data << endl;
}
};
北极猩猩 2003-10-30
  • 打赏
  • 举报
回复
来晚了:(
panzhaoping 2003-10-30
  • 打赏
  • 举报
回复
UP
langzi8818 2003-10-29
  • 打赏
  • 举报
回复
UP,上面的兄弟应该说的对吧
boxban 2003-10-29
  • 打赏
  • 举报
回复
template<class T1> complex(const complex<T1>& source_object)
的意思是:通过T1类型的complex构造一个T类型的complex。例如:从complex<int>对象构造一个complex<double>对象。
在实现代码中,source_object(complex<int>)是一个不同于当前类(complex<double>)的对象,就像class A 不同于 class B一样。
allen_zhaozhencn 2003-10-29
  • 打赏
  • 举报
回复
在类的成员函数中,对象当然可以直接访问该类的private成员.

如:
class A
{
private:
int data;
public:
A(const A& object)
{
data=object.data; //OK!

}

};
Chrisma 2003-10-29
  • 打赏
  • 举报
回复
没有定义新摸板,相当于深拷贝构造函数而已:
template<class T>complex(const complex<T>& source_object)
{
m_data=source_object.m_data ;

}
xingxing 2003-10-29
  • 打赏
  • 举报
回复
source_object是一个对象,当然不能访问自己的private成员m_data了
allen_zhaozhencn 2003-10-29
  • 打赏
  • 举报
回复
谢谢boxban 和 langi8818,我明白了

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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