1.public的变量可以在类中以及外部访问到;

2. private只可以在类/友元中访问到。

  1. #include <iostream>
  2. using namespace std;
  3. //-------------------------------
  4. class Test {
  5. public:
  6. int publicx;
  7. void publicm();
  8. protected://当前类和子类
  9. int protectedx;
  10. void protectedm();
  11. private://当前类
  12. int privatex;
  13. void privatem();
  14. };
  15.  
  16. //--------------------------------
  17. void Test::privatem() {
  18. cout << "privatem():\n";
  19. this->publicx = ;
  20. cout<<this->publicx<<endl;
  21. }
  22. void Test::protectedm() {
  23. cout << "protectedm()..\n";
  24.  
  25. }
  26. void Test::publicm() {
  27. cout << "publicm()...\n";
  28.  
  29. }
  30.  
  31. //--------------------------------
  32. int main() {
  33. Test t;
  34. //t.protectedm();//error C2248: “Test::protectedm”: 无法访问 protected 成员(在“Test”类中声明)
  35. //t.privatem();//error C2248: “Test::privatem”: 无法访问 private 成员(在“Test”类中声明)
  36. t.publicm();
  37. while();
  38. return ;
  39. }

3. C++中同一个类的不同对象可以访问对方的private成员吗?

可以。在同一个对象甚至是同一个类的对象中,private/public/protected的方法和变量是可以无限制的混访的。【个人测试得到的结论,也许不尽完善。】

4.下面针对private:

类中的私有成员可以在以下四个地方被访问
(1)当前类中;
(2)类的友元函数;//类的友元函数就是在类中把普通的函数用friend进行声明
(3)类的友元成员函数;//类的友元成员函数就是在类中把另一个类的成员函数用friend进行声明

(4)类的友元类中所有成员函数;//类的友元类就是在类中把另一个类用friend进行声明

  1. //类的友元函数:
    class Stu {
  2. friend void test2();
  3. private:
  4. int age;
  5. void show( );
  6. }
  7. void test1() {
  8. Stu stu;
  9. stu.age = ; //错
  10. stu.show(); //错
  11. }
  12. void test2() {
  13. Stu stu;
  14. stu.age = ; //对
  15. stu.show(); //对
  16. }
  1. //类的友元成员函数
  2. class Stu {
  3. friend void Teacher::test2();
  4. private:
  5. int age;
  6. void show( );
  7. }
  8. class Teacher {
  9. public:
  10. void test1( );
  11. void test2();
  12. }
  13. void Teacher::test2( ) {
  14. Stu stu;
  15. stu.age=; //对
  16. stu.show(); //对
  17. }
  18. void Teacher::test1( ) {
  19. Stu stu;
  20. stu.age=; //错
  21. stu.show(); //错
  22. }
  1. //类的友元类
  2. class Stu {
  3. friend class Teacher;
  4. private:
  5. int age;
  6. void show( );
  7. }
  8. class Teacher {
  9. public:
  10. void test1( );
  11. void test2();
  12. }
  13. void Teacher::test1( ) {
  14. Stu stu;
  15. stu.age=; //对
  16. stu.show(); //对
  17. }
  18. void Teacher::test2( ) {
  19. Stu stu;
  20. stu.age=; //对
  21. stu.show(); //对
  22. }

补充:

1.C++访问类中私有成员变量的方法

  http://www.51testing.com/html/93/n-843693.html

  1. /*原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,还有就是就是通过友元访问。但是!但如果没有get、set方法都没有提供,也没有定义友元,比如使用的是第三方提供的.o(或者动态库)来进行开发的,并且实际应用中我们确确实实需要改变其中某个对象的一个私有参数,有没有什么办法呢?还有一种比较文艺青年的方法,我们知道,一个进程有程序段和数据段,如果我们知道了对象的数据空间,那么得到该对象的成员变量值也就很简单了,而实际上,对象数据段的首地址其实就是对象地址,以例子说明:*/
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. class center
  7. {
  8. public:
  9. void setX(float _x){x=_x;}
  10. void setY(float _y){y=_y;}
  11. void setMeanValue(float avg){meanValue=avg;}
  12. float getX(){return x;}
  13. float getY(){return y;}
  14. float getMeanValue(){return meanValue;}
  15. center():x(0.0),y(0.0),meanValue(0.0){}
  16. private:
  17. float x;
  18. float y;
  19. float meanValue;
  20. };
  21.  
  22. int main()
  23. {
  24. center A;
  25. //普通青年的赋值方法;
  26. A.setX(1.0);
  27. A.setY(4.0);
  28. A.setMeanValue(13.0);
  29. cout<<A.getX()<<" "<<A.getY()<<" "<<A.getMeanValue()<<endl;
  30.  
  31. //文艺青年的赋值方法;
  32. //*((float*)&A):将center对象A的内存空间强制类型转化为用int*指向的内存空间,访问该内存
  33. float tmp = *((float*)&A);
  34. cout<<tmp<<endl;//输出A.x的值
  35. tmp = *((float*)&A + );
  36. cout<<tmp<<endl;//输出A.y的值
  37. *((float*)&A + )=;//修改A.meanValue的值
  38. cout<<A.getMeanValue()<<endl;
  39.  
  40. while();
  41. return ;
  42. }
  43. //1 4 13
  44. //1
  45. //4
  46. //2

补充:

构造函数定义为private,protected http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125487.html

c++,public/protected/private权限修饰符的更多相关文章

  1. java中的public,protected,private权限修饰

    public和private基本没问题,主要是默认的和protected之间的区别 同一包中默认的和protected一样,所以来看看不同包的情况 看下如下代码,两个类位于不同包: public cl ...

  2. PHP中public、protected、private权限修饰符

    PHP中有三种访问修饰符 默认是public public(公共的.默认) protected(受保护的) private(私有的) 访问权限 public protected private 类内 ...

  3. final、以及public、protected、(default)、private权限修饰符总结

    package cn.learn.Final; /* 当final用来修饰类 1.该类不能有任何子类,成员方法均无法覆盖重写,但可以重写父类的方法 当final用来修饰方法 1.该方法不能被覆盖重写 ...

  4. Java public 和 private 访问修饰符

    何为封装 从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要. 那什么是封装?字面意思就是把摆在外面的东西包起来. 一句话,封装就是对外隐藏内部细节. 那为何要封 ...

  5. private ,friendly,public protected四种修饰符访问权限(从idea代码提示中看出)

    文件一,本类中可以访问全部: package xsf; /** * Created by liwenj on 2017/7/25. */ public class A { private int x= ...

  6. 10-04 Java 权限修饰符,类及其组成常见的修饰符

    四种权限修饰符的测试 /* 权限修饰符: 本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类) private Y 默认 Y Y protected Y Y Y public Y Y ...

  7. Java中的四种权限修饰符及六种非访问修饰符(简识)

    一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...

  8. 权限修饰符和final关键字

    public 不受任何限制,可以被其他任何类访问 一个JAVA文件只能包含一个public文件 java将public类作为每个编译单元的数据接口  只能有一个接口 private 只能在自己类中访问 ...

  9. Java中权限修饰符public、private、protected和default的区别

    1.public 可以修饰类.成员变量和成员函数,没有任何限制,同一个包中,或者不同包中的类都可以自由访问 2.private 可以修饰成员变量和成员函数,只能在本类中使用 3.default (不写 ...

随机推荐

  1. BZOJ 1878: [SDOI2009]HH的项链( BIT )

    离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...

  2. IOS 表视图(UITableVIew)的使用方法(5)表视图的编辑功能(删除)

    默认的,如果表视图支持编辑,那用户可以通过两种方式来删除某些行,其一为单击左侧的红色按钮后行右侧显示“Delete”按钮,其二为在单元行上的手指向左滑动,“Delete”按钮也会出现供用户单击.无论哪 ...

  3. Stack trace对性能的影响

    package ceshi; public class ExceptionTest { public long maxLevel = 20; public static void main(Strin ...

  4. JS 原型 & 继承

    理解原型链 先看看http://www.ituring.com.cn/article/56184和http://www.cavabiao.com/prototype-and-inherit-of-ja ...

  5. CentOS 6.4下Squid代理服务器的安装与配置,反向代理

    CentOS 6.4下Squid代理服务器的安装与配置 一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件 ...

  6. /export/App/zz/phantomjs-1.9.7-linux-x86_64/bin

    /export/App/zz/phantomjs-1.9.7-linux-x86_64/bin

  7. iphone开发小记

    程序功能:点击Button实现按钮的文本变换 一,打开Xcode,新建single view based application,拖动一个Button控件到屏幕中间 项目目录树下包含AppDelega ...

  8. Ubuntu 12.10 安装JDK7

    1.首先到oracle下载上下载jdk-7u25-linux-i586.tar.gz 2.将jdk-7u25-linux-i586.tar.gz复制到/usr/lib/jvm/目录以下,这里假设没有j ...

  9. BFG

    "/"应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 提供程序集合中不 ...

  10. MVC DI

    using System;using Microsoft.Practices.Unity; public class BizInstanceFactory { private static reado ...