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

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引用保护变量不知是为什么?谢谢
...全文
125 点赞 收藏 10
写回复
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里面经常看到的那样,罗里巴索,麻烦。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告