关于成员函数的私有成员的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 09:23:38
你好,我是一个C++初学者,我最近遇到了一个小的悖论:类的对象可以通过点运算符直接访问同一类的其他对象的私有数据。

(1)私有成员(数据与代码)是不能被除该类中的成员访问的。两个不同对象只要属于同一类它们之间就可以互相访问其私有成员,这是怎么回事?

(2)类的成员指的是什么啊?

(3)最好在介绍一下this的用法,我也不太懂,万分感谢

下面是我编的出现问题的代码:
#include <iostream>
using namespace std;
class myclass{
int i;
public:
myclass(int s){i=s;}
myclass(){i=0;}
void xput(int test){i=test;}
void xget(){cout<<"i is "<<i<<"\n";}
void super_put(myclass t){i=t.i;}//直接访问了私有成员,还是用点访问的-_-
};
int main(){
myclass a,b;
int choice;
cout<<"直接访问私有成员变量测试开始……\n";
cout<<"请输入一个整数:";
cin>>choice;
a.xput(choice);
cout<<"a.xget() is ";
a.xget();
cout<<"b.xget() is ";
b.xget();
b.super_put(a);
cout<<"AFTER b.super_put(a)……\n";
cout<<"b.xget

只要是在成员函数和友元中就可以直接访问该类的私有成员变量,无论类的对象是谁。
所以,访问类的私有成员变量的权限是相对于访问它的地方的,而不是类的对象。

再,成员函数是类的成员函数,不是某个对象的成员函数。所以只要在该类的成员函数中,该类的对象可以直接访问类的成员变量的。而所在类一个自身的实例,可以用this来表示。所以又可以写成
void super_put(myclass t)
{this.i=t.i;}
this和t一样都是myclass的一个对象。

你这哪是直接访问呀,直接访问是指在其它地方(不是类定义中)直接用点号来访问呀,在你的代码中,还不是在类的成员函数来访问的吗,是受控的呀,当然可以了。

this指针就是指代你申明的类的实例的指针,一般是用来作返回值的,也可以在类定义的时候使用以便区别环境,你可以认为this就是该类的一个指针表达就可以了。

一元运算符最常见的有++,--,!,+,-,~,*,&等凡是只要一个操作数的都是一元运算符,

(1)C++类支持的访问标号包括public,private和protected.
在public之后定义的成员称为公有成员,可以由程序的所有部分访问private之后定义的成员称为私有成员,只能由本类(的成员函数)访问:在protected之后定义的成员称为受保护成员,只能由本类及后代类访问
(2)类的成员指的是类中的代码,可分为数据成员和函数成员
(3)this为C++保留字,它为一个指针,在任一个类成员函数的运行过程中,指针this总指向当前对象(或说this总代表当前对象的地址).所以,类成员函数中总可以用*this来表示当前对象,也可用this-><成员名>或(*this).<成员名>来表示当前对象的成员