c++ 类的两个不同实例如何相互访问对方的成员变量

比如 一个有私有成员itsAge的cCat类,实例了两个对象firsky和boots,那么boots如何访问firsky中的itsAge
书上说这是可以的

属于同一个类的两个对象是产生出来的类的两个不同的实例,显然不能互相访问私有成员变量
有相同的属性和方法是不错,不过它只能访问自己的成员变量,不能访问其他实例的成员变量
一个类的私有成员连它派生出来的子类都无法访问,其他类更不能访问,你可以定义另一个类B,然后把B声明为作为cCat的friend,那么b的对象就可以访问cCat的函数,但是不能访问cCat对象的东西。这个问题这么理解,就像是家庭是一个类,假设A,B都是家庭的实例,A家庭可以访问B家庭的老婆吗?追问

书上说是可以的 我也不清楚

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-04-23
书上说的是这个意思

#include <iostream>
#include <cstdio>
#include <cstdarg>

using namespace std;

class Cat
{
private:
int itsAge;
public:
void setAge(int a){itsAge=a;}
void setAge(Cat another){itsAge = another.itsAge;};
int getAge(){return itsAge;};
};

int main()
{
Cat cata, catb;

cata.setAge(10);
catb.setAge(cata);
cout<<catb.getAge()<<endl;

system("pause");

return 0;
}追问

是这样的么 感觉不太可能 这让我感觉书上说的那是废话

追答

?

追问

书上不会无缘无故说句废话吧???

追答

我感觉你在说废话
你先分清楚什么叫函数内部什么叫函数外部
传递参数是函数外部
对参数进行访问才是在函数内部

追问

你说的那个是无论哪个函数都可以的 这个重点是两个实例之间好不好

追答

什么叫无论哪个函数都可以 你写一个外部函数试试 上程序

追问

加入头文件那个函数不可以啊

追答

那你给我printf("%d", catb.itsAge);编译一下啊

追问

那是私有的 怎么能出来啊 无语

追答

这回轮到我无语了,刚刚还说"加入头文件那个函数不可以啊"
那你给我写程序我看你什么意思...

你给我写一个非该类的成员函数 友元函数 能访问catb的私有变量的函数出来吧

追问

哦 我看仔细了 对不起啊 嘿嘿 void setAge(Cat another){itsAge = another.itsAge;};
我有点笨 不要见怪啊

追答

客气 见惯不怪了 呵呵

本回答被提问者采纳
第2个回答  2012-03-01
在类中可以定义一个访问成员变量的函数,参数的类型可以使累的引用类型或者是类的指针类型,这两种应该都是可以的。
第3个回答  2011-09-14
这个好像不可能吧。

c++ 类的两个不同实例如何相互访问对方的成员变量
属于同一个类的两个对象是产生出来的类的两个不同的实例,显然不能互相访问私有成员变量 有相同的属性和方法是不错,不过它只能访问自己的成员变量,不能访问其他实例的成员变量 一个类的私有成员连它派生出来的子类都无法访问,其他类更不能访问,你可以定义另一个类B,然后把B声明为作为cCat的friend...

C++如何在一个类的成员函数中调用另一个类的成员函数
1、首先声明如下所示的类,类内部定义一个public的整型数据成员。2、主函数中定义指向类的数据成员的指针。3、声明类的对象,该对象变量调用指向类的数据成员的指针进行赋值操作。4、然后输出打印类的数据成员,从结果看,上一步的操作赋值成功。5、定义类的指针,通过指针指向对象成员的指针来进行赋值。...

C++ 中 如何 访问类成员函数的机制,有时候看见 Dog dog; dog.getName...
dog.getName()就是调用这个对象的getName成员 ->是指向成员操作符,左值通常是一个已有的该结构或类类型的指针。(->并不要求左值指针以分配内存,但基本上都是要分配的,为了内存读写。)如 Dog * p_dog = (Dog *)malloc (sizeof(Dog));p_dog -> getName()即Dog类型指针指向其getName成员...

c ++私有成员访问性
二:类的私有成员是类的内部属性,就相当于一个人的心脏的跳动频率会让别人访问修改么一个道理,private的意思是在被继承或者类的外部无法访问这个成员,类在实体化后也就是建立对象后,具体对象的函数可以调用自己内部的private对象或者是友员函数也可以,private成员在不同的对象之间也是不能够相互访问的。

“同一个类的不同对象可以访问对方的private成员变量或调用对方的private...
其中成员包括成员变量或成员方法。其中java支持的四种访问限制:public——所有类都可以访问 private——只有本类可以访问 protected——子类或者同一包的类可以访问 <省略>——只允许同一包的类可以以访问 下图是访问级别表 所以,同类的两个不同的private成员变量可以进行互访。

c++中父类的静态成员变量在子类中的使用(急)
类”的,而不是属于“对象”的。(请好好理解这句话)。子类和父类是不同的类,当然静态变量不能共享。子类对象和父类对象却有包含的关系。如果父类的静态变量是public或者子类在父类中定义为friend的话,外部任何类(包含你说的子类),就可以访问这个静态变量,调用方法为:父类::静态变量名 ...

c++“友元函数”、“常成员函数”、“派生类、基类”的常见问题...
::只有public的成员函数可以互相调用,非静态函数一律生成实例后方可 派生类怎么调用基类的成员变量?是通过定义为友元函数来调用基类的成员变量吗?::如果是public或protected可以直接使用,private可以通过友元方式(强烈建议不要这样做)2.友元函数普通函数声明为友元函数,可以访问类的成员函数友元类可以...

如何在回调函数中调用某个类的成员函数
1). 不使用成员函数,为了访问类的成员变量,可以使用友元操作符(friend),在C++中将该函数说明为类的友元即可。2). 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。静态成员函数具有两大特点:其一,可以 在没有类实例的情况下使用;其二,只能访问静态成员变量和...

实例成员和类成员的区别
2、存储结构的差别:对于实例变量而言,每个对象的每个实例成员变量都分配了一个存储单元使得不同对象的实例成员变量具有不同的值;而对于类成员变量只分配一个存储单元,使得所有的对象共同使用一个类成员变量。3、引用方式的差别: 实例成员变量对于对象,通过对象进行访问;类成员变量属于类,既可以通过对象...

如何在C#中,在一个类里调用另外一个类的方法
类:一个基本的C#类中包含数据成员、属性、构造器和方法。属性可以是静态或实例成员。在C#中类的声明与C++和Java很相似。但是,不像C++,C#结构体与类是不支持继承多个父类。但是,与Java相同的是,一个结构体可以实现接口(interface)。Java的关键字import已经被替换成using,它起到了同样的作用。以上...

相似回答