c++,public/protected/private权限修饰符
1.public的变量可以在类中以及外部访问到;
2. private只可以在类/友元中访问到。
#include <iostream>
using namespace std;
//-------------------------------
class Test {
public:
int publicx;
void publicm();
protected://当前类和子类
int protectedx;
void protectedm();
private://当前类
int privatex;
void privatem();
}; //--------------------------------
void Test::privatem() {
cout << "privatem():\n";
this->publicx = ;
cout<<this->publicx<<endl;
}
void Test::protectedm() {
cout << "protectedm()..\n"; }
void Test::publicm() {
cout << "publicm()...\n"; } //--------------------------------
int main() {
Test t;
//t.protectedm();//error C2248: “Test::protectedm”: 无法访问 protected 成员(在“Test”类中声明)
//t.privatem();//error C2248: “Test::privatem”: 无法访问 private 成员(在“Test”类中声明)
t.publicm();
while();
return ;
}
3. C++中同一个类的不同对象可以访问对方的private成员吗?
可以。在同一个对象甚至是同一个类的对象中,private/public/protected的方法和变量是可以无限制的混访的。【个人测试得到的结论,也许不尽完善。】
4.下面针对private:
类中的私有成员可以在以下四个地方被访问
(1)当前类中;
(2)类的友元函数;//类的友元函数就是在类中把普通的函数用friend进行声明
(3)类的友元成员函数;//类的友元成员函数就是在类中把另一个类的成员函数用friend进行声明
(4)类的友元类中所有成员函数;//类的友元类就是在类中把另一个类用friend进行声明
//类的友元函数:
class Stu {
friend void test2();
private:
int age;
void show( );
}
void test1() {
Stu stu;
stu.age = ; //错
stu.show(); //错
}
void test2() {
Stu stu;
stu.age = ; //对
stu.show(); //对
}
//类的友元成员函数
class Stu {
friend void Teacher::test2();
private:
int age;
void show( );
}
class Teacher {
public:
void test1( );
void test2();
}
void Teacher::test2( ) {
Stu stu;
stu.age=; //对
stu.show(); //对
}
void Teacher::test1( ) {
Stu stu;
stu.age=; //错
stu.show(); //错
}
//类的友元类
class Stu {
friend class Teacher;
private:
int age;
void show( );
}
class Teacher {
public:
void test1( );
void test2();
}
void Teacher::test1( ) {
Stu stu;
stu.age=; //对
stu.show(); //对
}
void Teacher::test2( ) {
Stu stu;
stu.age=; //对
stu.show(); //对
}
补充:
1.C++访问类中私有成员变量的方法
http://www.51testing.com/html/93/n-843693.html
/*原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,还有就是就是通过友元访问。但是!但如果没有get、set方法都没有提供,也没有定义友元,比如使用的是第三方提供的.o(或者动态库)来进行开发的,并且实际应用中我们确确实实需要改变其中某个对象的一个私有参数,有没有什么办法呢?还有一种比较文艺青年的方法,我们知道,一个进程有程序段和数据段,如果我们知道了对象的数据空间,那么得到该对象的成员变量值也就很简单了,而实际上,对象数据段的首地址其实就是对象地址,以例子说明:*/
#include <iostream>
#include <string>
using namespace std; class center
{
public:
void setX(float _x){x=_x;}
void setY(float _y){y=_y;}
void setMeanValue(float avg){meanValue=avg;}
float getX(){return x;}
float getY(){return y;}
float getMeanValue(){return meanValue;}
center():x(0.0),y(0.0),meanValue(0.0){}
private:
float x;
float y;
float meanValue;
}; int main()
{
center A;
//普通青年的赋值方法;
A.setX(1.0);
A.setY(4.0);
A.setMeanValue(13.0);
cout<<A.getX()<<" "<<A.getY()<<" "<<A.getMeanValue()<<endl; //文艺青年的赋值方法;
//*((float*)&A):将center对象A的内存空间强制类型转化为用int*指向的内存空间,访问该内存
float tmp = *((float*)&A);
cout<<tmp<<endl;//输出A.x的值
tmp = *((float*)&A + );
cout<<tmp<<endl;//输出A.y的值
*((float*)&A + )=;//修改A.meanValue的值
cout<<A.getMeanValue()<<endl; while();
return ;
}
//1 4 13
//1
//4
//2
补充:
构造函数定义为private,protected http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125487.html
c++,public/protected/private权限修饰符的更多相关文章
- java中的public,protected,private权限修饰
public和private基本没问题,主要是默认的和protected之间的区别 同一包中默认的和protected一样,所以来看看不同包的情况 看下如下代码,两个类位于不同包: public cl ...
- PHP中public、protected、private权限修饰符
PHP中有三种访问修饰符 默认是public public(公共的.默认) protected(受保护的) private(私有的) 访问权限 public protected private 类内 ...
- final、以及public、protected、(default)、private权限修饰符总结
package cn.learn.Final; /* 当final用来修饰类 1.该类不能有任何子类,成员方法均无法覆盖重写,但可以重写父类的方法 当final用来修饰方法 1.该方法不能被覆盖重写 ...
- Java public 和 private 访问修饰符
何为封装 从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要. 那什么是封装?字面意思就是把摆在外面的东西包起来. 一句话,封装就是对外隐藏内部细节. 那为何要封 ...
- private ,friendly,public protected四种修饰符访问权限(从idea代码提示中看出)
文件一,本类中可以访问全部: package xsf; /** * Created by liwenj on 2017/7/25. */ public class A { private int x= ...
- 10-04 Java 权限修饰符,类及其组成常见的修饰符
四种权限修饰符的测试 /* 权限修饰符: 本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类) private Y 默认 Y Y protected Y Y Y public Y Y ...
- Java中的四种权限修饰符及六种非访问修饰符(简识)
一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...
- 权限修饰符和final关键字
public 不受任何限制,可以被其他任何类访问 一个JAVA文件只能包含一个public文件 java将public类作为每个编译单元的数据接口 只能有一个接口 private 只能在自己类中访问 ...
- Java中权限修饰符public、private、protected和default的区别
1.public 可以修饰类.成员变量和成员函数,没有任何限制,同一个包中,或者不同包中的类都可以自由访问 2.private 可以修饰成员变量和成员函数,只能在本类中使用 3.default (不写 ...
随机推荐
- Web学习之自定义标签
1.编写一个实现Tag接口的Java类(标签处理器类) package me.gacl.web.tag; import java.io.IOException; import javax.servle ...
- Mysql的四种分区
mysql一共有四大分区分别为hash range list key 四个分区. 分区的字段需要时主键才可以成功 . 第一种 hash分区 第二张list分区 第三种 key分区 第四种 range分 ...
- [LeetCode]题解(python):134-Gas Station
题目来源: https://leetcode.com/problems/gas-station/ 题意分析: 在一个圈子路线里面有N个汽油站,i站的汽油有gas[i]汽油.现在有一辆无限容量的车,它从 ...
- selenium 学习笔记 ---新手学习记录(2) 问题总结
今天研究了下ie.chrome.firefox浏览器执行脚本 1.首先firefox下执行时,我是安装在d盘了,所以要更改路径 //如果火狐浏览器没有默认安装在C盘,需要制定其路径 System.se ...
- ISO14443 ISO15693 ISO18000
[提要]射频标签的通信标准是标签芯片设计的依据,目前国际上与RFID相关的通信标准主要有:ISO/IEC 18000标准(包括7个部分,涉及125KHz, 13.56MHz, 433MHz, 860- ...
- opencv-python 学习笔记2:实现目光跟随(又叫人脸跟随)
如果机器人的脸能随着前方人脸而转动,你会不会觉得这种互动很有意思.年前的时候,学习了一下opencv,通过opencv可以简单的实现人脸跟随.再加上几个舵机控制头部转动,机器人就可以互动了.呵呵 这里 ...
- VC使用CRT调试功能来检测内存泄漏
信息来源:csdn C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话.在 C/C+ ...
- BZOJ 3211 花神游历各国 (树状数组+并查集)
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字 ...
- One Person Game(扩展欧几里德求最小步数)
One Person Game Time Limit: 2 Seconds Memory Limit: 65536 KB There is an interesting and simple ...
- JavaScript 高级程序设计(第3版)笔记——chapter5:引用类型(基本包装类型部分)
一.介绍 为了方便操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean, Number, String. 实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装 ...