同一个类不同对象,可以互相访问对方的私有成员而不通过get()或set()

今天看C++的书看到有一个类,类中定义了静态私有的本类对象,然后默认的构造函数是用此静态对象直接用 . 运算符访问自身成员来初始化的。成员的访问控制符是针对类而言的,而不是对象的,下面用C++验证

1.用C++验证

#include<iostream>
class Date
{
	int d, m, y;
	static Date default;
public:
	//Date(){};
	Date(int dd, int mm, int yy);
	static void set_default(int, int, int);
	void disply(){
		std::cout << "date=" << d << " month=" << m << " year=" << y << '\n';
	}
};
Date::Date(int dd=0,int mm=0,int yy=0)
{
	d = dd ? dd : default.d;
	m = mm ? mm : default.m;
	y = yy ? yy : default.y;	
}
Date Date::default;

int main(){
	class Date d1;
	d1.disply();
	return 0;
}
正常运行,结果为

   

  (2)作为对比,把静态成员对象和用静态对象初始化的构造函数删去,使用系统默认的构造函数,程序如下

#include<iostream>
class Date
{
	int d, m, y;
public:
	void disply(){
		std::cout << "date=" << d << " month=" << m << " year=" << y << '\n';
	}
};
int main(){
	class Date d1;
	d1.disply();
	return 0;
}
              
             可以看见,得到的是很奇怪的数,这是因为我们没有给d1初始化,创建d1时也不会自动地给成员赋0值。

2 java中也是适用的,用java的验证代码如下

package test;

public class SameClass {
	private int a;//这个类说明类型访问时对类而言的,两个类的对象可以在成员函数中直接用.互相访问对方的私有,而不同过getClass
	static SameClass s;
	public SameClass(){
		a=s.a;
	}
	public SameClass(int b){
		a=b;
	}
	public void copy(SameClass s){
		this.a=s.a;//此处没有用s.get()(也没定义get()方法),可行;若是在别的类中则不行
	}
	public void display(){
		System.out.println(a);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SameClass s1=new SameClass(3),s2=new SameClass(2);
		s2.copy(s1);
		s2.display();
	}
}

控制台输出3,无报错


论坛上也有相关的讨论http://bbs.csdn.net/topics/330098523


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值