C++的面向对象里的private的用法

flyingpigone 2009-09-21 08:50:51
#include<iostream.h>
#include<string.h>
class Person
{
char name[10],sex;
int age;

public:
Person(char *n,int a,char s)
{
strcpy(name,n);
age=a;
sex=s;
}
void print()
{
cout<<"name:"<<name;
cout<<",age:"<<age;
cout<<",sxe:"<<sex<<endl;
}
};
void main()
{
Person zh("zhang",50,'m'),c("cai",35,'w');
zh.print();
c.print();
}
问题是private里的3个属性的私有成员到底有什么作用啊,怎么隐藏啊?

有人这样回答:
private的目的就是外部无法进行随便修改,除非是友元函数之类的
这就是所谓的封装性啊
要修改的话可以加一些setter函数,好处是可以对数据的有效性一致性进行判断和控制吧
可是我的问题是:
private里面不就是一个对象的属性吗,就是把很多属性封装起来,外部无法修改是什么意思啊,那结构体不也具有封装性吗?
最近想再学学C++,还望达人指点
...全文
502 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
na2650945 2009-09-22
  • 打赏
  • 举报
回复
举个例子说。
你要是开车的话。
车对于你来说就是个封装好的东西。
车有对你的界面。
就是方向盘一类的东西。
他有自己PRIVATE。
比如。发动机。
作为用户随意改动发动机当然不行。
这就是封装的意义。
code_study 2009-09-22
  • 打赏
  • 举报
回复
看电视只需把插头插上就可以用了,插头里的电不知道如何生成的....
liuwg9999 2009-09-22
  • 打赏
  • 举报
回复
Person zh("zhang",50,'m'),c("cai",35,'w'); 这是类对外的接口,
就相当于一个机器,总得需要有人设置和操作的地方,对外的接口就是这个作用,
但是你自己的操作和设置你自己当然是知道的,你不知道的只是类自己内部的实现方式
你可以设置name为zhang,但是类里面把zhang怎么处理了就是类自己的事了


[Quote=引用 11 楼 flyingpigone 的回复:]
还有就是void main()
{
        Person zh("zhang",50,'m'),c("cai",35,'w');
        zh.print();
        c.print();
}
不是封装让别人看不到吗,可是Person zh("zhang",50,'m'),c("cai",35,'w'); 这句话谁也可以看到啊,封装的只是属性的定义,没有实际的东西啊,比如一个员工的类,只是封装工号 年龄 性别等,但没具体的数值啊,别人看到会怎么样啊,有什么实际的意思吗
[/Quote]
liuwg9999 2009-09-22
  • 打赏
  • 举报
回复
对于class person,
Person a;
a.age = 10
是不行的,a私有
而struct person
Person a;
a.age = 10
是可以的
这就是类中private的作用
[Quote=引用 10 楼 flyingpigone 的回复:]
你的意思是Person a;
a.age = 10
这短程序是错的吧,只能调用成员函数才能修改,是这样吧?


引用 1 楼 yshuise 的回复:
Person a;
a.age = 10;//不能修改。必须调用成员函数才能修改。

[/Quote]
liuhao159753 2009-09-22
  • 打赏
  • 举报
回复
对于私有成员,如果想修改和使用成员变量,需要写set_data和Get_data函数,如果你用的是together设计类,这些函数自动会生成,起到对私有变量的封装作用
chaow09 2009-09-22
  • 打赏
  • 举报
回复
其实封装性对于我们做实验是没有多大用处的,在大型项目中会体现出来,因为不会让你出现Person zh("zhang",50,'m'),c("cai",35,'w')这样直接从DOS下输入参数数据,项目中数据的传递都是使用输入输出流来实现各个功能之间的连接,那样的话,输入输出流会按函数提供的形参选择输入各个参数数据,而这些是外部看不见的,从而实现封装性。
y199728652 2009-09-22
  • 打赏
  • 举报
回复
消失了。。
loveour 2009-09-22
  • 打赏
  • 举报
回复
LZ呢?
lihan6415151528 2009-09-22
  • 打赏
  • 举报
回复
1楼已经很清楚了,你只能用它提供的get和set方法去修改private的值
xiao_yanjing 2009-09-22
  • 打赏
  • 举报
回复
重新看下
flyingpigone 2009-09-21
  • 打赏
  • 举报
回复
还有就是void main()
{
Person zh("zhang",50,'m'),c("cai",35,'w');
zh.print();
c.print();
}
不是封装让别人看不到吗,可是Person zh("zhang",50,'m'),c("cai",35,'w'); 这句话谁也可以看到啊,封装的只是属性的定义,没有实际的东西啊,比如一个员工的类,只是封装工号 年龄 性别等,但没具体的数值啊,别人看到会怎么样啊,有什么实际的意思吗
flyingpigone 2009-09-21
  • 打赏
  • 举报
回复
你的意思是Person a;
a.age = 10
这短程序是错的吧,只能调用成员函数才能修改,是这样吧?


[Quote=引用 1 楼 yshuise 的回复:]
Person a;
a.age = 10;//不能修改。必须调用成员函数才能修改。
[/Quote]
binggou8993 2009-09-21
  • 打赏
  • 举报
回复
其实类的封装性在某种意义上来说是为了使我们的语言更自然化,所谓自然化就是使语言实现本身接近自然事物,如,你对闹钟的调节,你不能直接转动它的齿轮,你只能通过闹钟提供给你的转扭来调节,这就是private属性与操作它的成员function的关系一致

当然这只是从语言本身的角度来说明。
mengxiangying504 2009-09-21
  • 打赏
  • 举报
回复
就像美国销售的飞机,只想用户使用几个控制杆,几个仪表就可以控制飞行,发射武器,这些就是提供的接口,而如何实现,里面有几个零件,这些都没必要让买飞机的人知道(不然亏大了)。所以不想让别人见到的东西,封装起来。
mengxiangying504 2009-09-21
  • 打赏
  • 举报
回复
楼主其实就是问封装的好处,可以查一查,比如对成员变量的可读性、可写性进行控制等等。
痞子小王 2009-09-21
  • 打赏
  • 举报
回复
class里的属性默认是private的,外面是无权访问的.
struct的数据成员是public的,是可以访问的。
chenzhp 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cattycat 的回复:]
class里的属性默认是private的,外面是无权访问的,struct的数据成员是public的,是可以访问的。
封装是为了数据安全,比方说,别人实现了一个类,提供了某些功能,但不想让你访问数据成员,就是private了。
[/Quote].
itegel84 2009-09-21
  • 打赏
  • 举报
回复
多看书,多写代码,慢慢就明白了。
封装性是对类外部来说的。
C++结构体和类的最大区别也就是默认访问权限了,如楼上所述。
其他功能上没什么区别。
cattycat 2009-09-21
  • 打赏
  • 举报
回复
class里的属性默认是private的,外面是无权访问的,struct的数据成员是public的,是可以访问的。
封装是为了数据安全,比方说,别人实现了一个类,提供了某些功能,但不想让你访问数据成员,就是private了。
老邓 2009-09-21
  • 打赏
  • 举报
回复
在C++里,结构体和类区别不大嘀!
原因1楼很清楚了。
加载更多回复(3)

64,649

社区成员

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

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