关于C++面向对象中的公私有问题

类的成员数据、函数为什么要分公有和私有,
这样有什么作用?
书上云:“私有就是外部不能直接访问的数据或执行的操作。”。
比如什么情况下不能直接访问或执行?

类成员函数和数据成员分为公有,保护,私有是为了更好的进行封装和继承
公有成员函数和数据成员可以被外部对象访问,而私有和保护的就不能被外部对象访问。好比公有的是你家的客厅,可以给自己用,也可以给客人用。而私有的就好比你家的卧室,只能你一个人用。
而为啥要有保护这个访问控制呢,是为了继承
在公有继承中,基类中的公共和保护的成员函数和数据成员,在子类中能够被继承,且基类的公共的成员,到了子类中也是公共的,基类中保护的成员,到了子类中也是保护的。
在保护继承中,基类中的公共和保护的成员函数和数据成员,到了子类中都成为了保护的成员函数和数据成员
在私有继承中,基类中的公共和保护的成员函数和数据成员,到了子类中都成了私有的成员函数和数据成员

我觉得,你想要外部能访问的成员函数和数据成员就定义为public,不想被外部访问的就定义为private,想被派生类继承的就定义成protected

还有,所谓外部就是在你的类之外定义的对象。
你可以试试
include<iostream>
using namespace std;
class A
{
private:
void f(){cout<<"!!!"<<endl;}
};
int main()
{
A a;
a.f();//编译时会报错,因为外部对象不能访问私有的成员函数和数据成员
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-15
你好,是这样的:
类的成员数据和成员函数分公有(public)和私有(private)是就其访问控制属性而言的,之所以如此是出于程序安全性考虑的,对于公有属性的成员数据和成员方法,外界可以直接访问和修改,而如果程序员不希望外界对他们进行直接操作,则将他们设为私有属性,对于私有属性的成员数据和成员方法,只有该类的成员方法可以访问和修改,如:
public class car{ //car类,具有私有数据成员rate和公有函数成员setrate
private int rate;
public int setrate(int a)
{rate=a;}
}
public class man{ //另一个类调用car类成员
private int age;
public void setcar(int b)
/*若紧接着此处用{rate=car.a}------错误,因为除car类外其他类不能访问和操作私有数据成员rate*/
{car.setrate(b);}------正确,其他类可以访问和操作公有函数成员setrate从而间接改变rate的值
希望对你有帮助,加油本回答被网友采纳
第2个回答  2010-11-13
公有,就是外部可以直接访问,而私有,就是只有成员函数可以访问,外部不能直接访问,这样起到封装保护数据的目的
相似回答