求助"拷贝构造函数"的问题

jiaonanjia1861 2005-03-19 09:21:50
class Student
{
public:
Student(char* pName="no name", int ssId=0)
{
id=ssId;
strcpy(name,pName);
cout<<"constructing new student"<<pName<<endl;
}
Student(Student& s)
{
cout<<"Construting copy of"<<s.name<<endl;
strcpy(name,s.name);
id=s.id;
cout<<"the id is"<<id<<endl;
}
~Student()
{
cout<<"Destructing"<<name<<endl;
}
protected:
char name[40];
int id;

};
void fn(Student s)
{
cout<<"In function fn()\n";
}
void main()
{
Student randy("Randy",1234);
cout<<"Calling fn()\n";
fn(randy);
cout<<"Returned from fn()\n";
}
看钱能书的时候碰到一个问题,在上面主函数中调用fn(randy)函数时,用到拷贝构造函数,但是在拷贝构造函数Student(Student&s)中,用类Student的对象s引用了保护变量char name[40],即s.name;但是根据类的封装性,对象是不能引用私有/保护变量的,只有成员函数才可以,这里用对象s引用保护变量不知是为什么?谢谢
...全文
175 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixiaofo 2005-03-20
  • 打赏
  • 举报
回复
私有/保护型变量可以通过本类中的成员函数访问。
拷贝构造函数是构造函数的一种,而构造函数是类的成员函数。
拷贝构造函数可以访问本类中的私有/保护型变量。前面所说的s是构造函数的一个参数。
5204711353 2005-03-20
  • 打赏
  • 举报
回复
拷贝构造函数是成员函数,可以访问成员变量
oyljerry 2005-03-20
  • 打赏
  • 举报
回复
拷贝构造函数是成员函数,可以访问成员变量
allen_zhaozhencn 2005-03-20
  • 打赏
  • 举报
回复
copy construct function属于类的成员函数,在成员函数访问通过对象访问其成员变量时,是不受其访问权限控制的。
dongpy 2005-03-19
  • 打赏
  • 举报
回复
在拷贝构造函数Student(Student&s)中,用类Student的对象s引用了保护变量char name[40],即s.name;
=============================================拷贝构造函数Student(Student&s)是Student成员函数,在类成员函数里当然有权限访问该类的私有/保

护成员变量。
jiaonanjia1861 2005-03-19
  • 打赏
  • 举报
回复
"在C++中,同样的类型的对象是可以不受封装机制的限制,自由操作数据的。"
请问"同样类型"是什么意思啊?
n88n 2005-03-19
  • 打赏
  • 举报
回复
我也搞不清
lw1a2 2005-03-19
  • 打赏
  • 举报
回复
应该只是在成员函数中可以
fhvk 2005-03-19
  • 打赏
  • 举报
回复
哎!我也是很晕呀
今天看书看到这里了,看了好久没有搞清
JustLikeTheWind 2005-03-19
  • 打赏
  • 举报
回复
在C++中,同样的类型的对象是可以不受封装机制的限制,自由操作数据的。
这样方便了复制构造函数的实现。否则每个成员变量都要设一个set/get函数,像Java里面经常看到的那样,罗里巴索,麻烦。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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