c++访问私有(private)成员变量的常用方法

类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。

在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直接访问。

私有成员变量的常用访问方法如下:

(1)通过公共函数为私有成员赋值

#include <iostream>
using namespace std;  

class Test
{
private:
	int x, y;
public:
	void setX(int a)
	{
		x=a;
	}
	void setY(int b)
	{
		y=b;
	}
	void print(void)
	{
		cout<<"x="<<x<<'\t'<<"y="<<y<<endl;
	}
} ; 

int main()
{
	Test p1;
	p1.setX(1);
	p1.setY(9);
	p1.print( );
	return 0;
}

(2)利用指针访问私有数据成员

#include <iostream>
using namespace std;
class Test
{
private:
	int x,y;
public:
	void setX(int a)
	{
		x=a;
	}
	void setY(int b)
	{
		y=b;
	}
	void getXY(int *px, int *py)
	{
		*px=x;    //提取x,y值
		*py=y;
	}
};
int main()
{
	Test p1;
	p1.setX(1);
	p1.setY(9);
	int a,b;
	p1.getXY(&a,&b);  //将 a=x, b=y
	cout<<a<<'\t'<<b<<endl;
	return 0;
}

(3)利用函数访问私有数据成员

#include <iostream>
using namespace std;
class Test
{
private:
	int x,y;
public:
	void setX(int a)
	{
		x=a;
	}
	void setY(int b)
	{
		y=b;
	}
	int getX(void)
	{
		return x;   //返回x值
	}
	int getY(void)
	{
		return y;   //返回y值
	}
};
int main()
{
	Test p1;
	p1.setX(1);
	p1.setY(9);
	int a,b;
	a=p1.getX( );
	b=p1.getY();
	cout<<a<<'\t'<<b<<endl;
	return 0;
}

(4)利用引用访问私有数据成员

#include <iostream>
using namespace std;
class Test
{
private:
	int x,y;
public:
	void setX(int a)
	{
		x=a;
	}
	void setY(int b)
	{
		y=b;
	}
	void getXY(int &px, int &py) //引用
	{
		px=x;    //提取x,y值
		py=y;
	}
};
int main()
{
	Test p1,p2;
	p1.setX(1);
	p1.setY(9);
	int a,b;
	p1.getXY(a, b); //将 a=x, b=y
	cout<<a<<'\t'<<b<<endl;
	return 0;
}  

时间: 2024-08-28 05:03:02

c++访问私有(private)成员变量的常用方法的相关文章

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

JavaSE8基础 当父类与子类中的成员变量重名了,使用super.名字 来访问父类的成员变量

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: /* * 当父类与子类中的成员变量重名了,使用super.名字 来访问父类的成员变量 */ //基类 class Person { public int num = 1; } //子类 class Javaer extends Person { //子类中的成员变量与父类重名了 public int num

private成员变量真的私有吗?(用指针刨他祖坟)

今天写程序时突然想到的,为什么不用指针去获取类的成员变量呢.于是做了这个实验.首先定义了一个类: 1 class Test { 2 private: 3 int i; 4 char c; 5 int* p; 6 public: 7 Test(int i,char c,int* p) 8 :i(998),c('Q'),p(new int(9999)){} 9 ~Test(){delete p;} 10 }; 有三个private的成员变量.该类型的对象在内存中的分布应该是这样的: 占12个字节,其

子类可以继承父类的一切方法,成员变量,甚至是私有的,但是却不能够访问这些私有的成员变量和方法

1.关于私有成员变量 无论父类中的成员变量是私有的.共有的.还是其它类型的,子类都会拥有父类中的这些成员变量.但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected.public方法(如getter.setter方法)来访问. 2.关于静态成员变量 无论父类中的成员变量是静态的.还是非静态的,子类都会拥有父类中的这些成员变量. 3.关于被子类覆盖的成员变量 无论父类中的成员变量是否被子类覆盖,子类都会拥有父类中的这些成员变量. 原文地址:https://ww

Objective-C 成员变量的访问修饰即成员变量可见性解析

总体来说Objective-C的访问成员变量可见性和C++基本一样,只是多了个@package. 以下是详细说明: 例子: @interface CTPerson : NSObject { @private int _age; @protected NSString *_name; @public double _height; @package double _weight; } @private:私有的,只有在本类的对象方法中可以直接访问它 @protected:受保护的:只能在本类和子类中

在赋值运算符函数中,类的实例能直接访问私有数据成员???

印象中,private的数据成员只能在类的成员函数中使用,无法通过类的对象直接访问!(错误理解) 正确的理解是:在类的成员函数中,可以直接访问私有成员.即只要在该类的成员函数中,无论是直接访问该类的私有数据成员,还是访问某个对象(必选是该类型)的私有数据成员,均是可以的!!! 借鉴网上(http://blog.csdn.net/iaccepted/article/details/34853937 )的说法就是: 实践证明,类(class)私有成员可以被类成员函数访问,不区分成员在哪个实例(ins

Java的private成员变量的继承问题

java板块关于private变量到底会不会被继承,一直都有争议. 传送门 另一种说法是非继承关系,但是不能够解释为什么. 分析内存的分配后发现: 当一个子类被实例化的时候,默认会先调用父类的构造方法对父类进行初始化,即在内存中创建一个父类对象,然后再父类对象的外部放上子类独有的属性,两者合起来成为一个子类的对象. 虽然说子类对象内存空间包含这个private变量,但是子类不能自己编写函数对这个private变量进行直接修改,访问.只能通过继承下来的public函数对private变量进行修改,

访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析

首先,我们需要清楚一下方法是由哪些部分构成的: [权限修饰符列表][别的修饰符列表] 返回值类型 方法名(参数列表){   方法体:} 然后我们需要知道成员变量和成员方法访问有几种情况:1.当前包同一个类  2.当前包里面别的类  3.别的包里别的类  4.自己包继承关系的类  5.从别的包里有继承关系的类 第一步先创建一个别的类的代码,示例: package com.java; public class admin{ //成员变量的访问权限 public int i1 = 10; protec

成员变量和成员方法的访问权限

*  ----------------成员变量的访问权限 *                              public     private       protected    default *  当前包同一个类              可以      可以        可以        可以 * *  当前包里面别的类            可以      不可以      可以        可以 * *  别的包里别的类              可以