当前位置:首页 » 文件传输 » 函数返回值访问私有数据
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

函数返回值访问私有数据

发布时间: 2022-04-25 01:09:29

A. 友元函数访问类的私有数据

你的class x有问题
申明友元时friend void y::g(); 需要class y的定义(在定义class x时,编译器还不知道函数void g()是class y的成员函数,因为此时还只有class y的申明,没有class y的定义)
建议改为friend class y;
其他的改法都很麻烦需要把某些对象改为对象的指针,在构造时new出对象来

B. 友元函数可以访问类的私有数据

普通函数是可以将类对象作为参数的,也可以直接访问public的成员函数和数据成员,但是不能访问private和protected类型的成员函数和数据成员。

C. 关于函数返回值的存储问题

fun里的a存储在调用fun函数时开辟的栈空间里,这块栈只在调用fun时对fun可用,调用结束后返回的a,其实是暂存在寄存器里的(一般情况下是eax),而返回到main里时,main又会把返回的值拷贝到自己所有的栈空间里(在这里是以临时变量的形式)。所以不管是fun还是main,任何非static、register变量和常量的存储都是在函数的局部存储区里(也就是对当前调用函数可见的栈空间)。main也是一个函数。

1、调用完就收回;
2、不是,栈是一段公共内存,函数的代码也不是存在栈里的,只是从栈上给新调用的函数分配一段栈空间,用来保存这个函数执行期间用到的局部变量;
3、函数的返回是被保存在寄存器里的(这个返回指的是return,不包括通过参数返回或者全局变量),栈空间由程序自动维护,函数退出以后栈的内容其实不会更改,只是栈指针复位,所以函数内部的局部变量声明了如果不赋值,它的值就是随机的也就是这个道理。

D. 友元函数能不能直接调用本类中的私有数据

#include<iostream>
#include<cmath>
using namespace std;

class Point{
public:
Point(int x,int y);
int x,y;
};

Point::Point(int x,int y){
this->x = x;
this->y = y;
}

class Line{
public:
Line(int a,int b,int c);
friend float distancet(Line& l,Point& p);
private:
int a,b,c;
};

Line::Line(int a,int b,int c){
this->a = a;
this->b = b;
this->c = c;
}

float distancet(Line& l,Point& p){
int k= (l.a*p.x +l.b*p.y +l.c);
if(k >= 0 )
k = k;
else
k = -k;
float j = sqrt(float(l.a*l.a+l.b*l.b));
return k/j;
}

int main(){
Point p(1,2);
Line L(1,2,3);
cout<<distancet(L,p)<<endl;
}
帮你调试了一下,可以运行了,语法错误就不说了。你那个友元函数的声明有问题,函数的参数里必须有Line类,因为声明的是Line的友元函数

E. 友元函数能不能访问类中的私有数据成员

1、 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
2、 友元函数可以访问类的静态成员、私有成员和公有成员。
3、友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

F. c++友元函数访问不了私有数据

std::ostream &operator<<(std::ostream os, const Vector &v)的Vector是不是要填上数据类型,让其变为类

Vector<int> &V

G. 友元函数不能像成员函数那样访问私有数据

声明中friend void plus(A& aa);
实现时
void plus(A& aa)
{
aa.a+=10;
}

H. C++友元函数访问类的私有数据

您好,看了代码理论上是可以的,然后在机子上编写了一个测试代码,就你上面提到的代码,我的测试时通过的没有遇到问题,代码如下:
/*--------------------------------------------------------------------------------
The test test.h
-----------------------------------------------------------------------------*/
#include<iostream>
using namespace std ;

class Test
{
private:
friend void setX(Test &, int) ;
friend ostream & operator<<(ostream &, Test &) ;
int x ;
public:
int getX() ;
} ;

void setX(Test &t, int iVal)
{
t.x = iVal ;
}

ostream & operator<<(ostream &output, Test &t)
{
output<<t.x<<endl ;
return output ;
}

int Test::getX()
{
return x ;
}

/*-----------------------------------------------------
Client.cpp
---------------------------------------------------*/
#include"test.h"

int main()
{
Test t ;
setX(t, 3) ;
cout<<t.getX() ;

cout<<t ;

getchar() ;
return 0 ;
}
测试下吧,可能跟你之前的代码有关吧。

I. C++函数模板的奇想,关于返回私有数据值一个简单函数

你总要让getdata知道你要get什么data,你一个template只是从类型上统一,而你get的那个什么data的“什么”还是要你确定。每个data都是独立的,所以你必须枚举完全。
你还不如这样用结构体打包你要的getdata的变量:
typedef struct _EG_{
int a;
double b;
char ch;
bool ok;
}EG,*PEG;
class CLS
{
public:
EG GetData(){return m_eg;}
private:
EG m_eg;
};

J. 友元函数对私有数据成员的访问

你在那个类里面申明那个函数是友元的,形参是你这个类得对象,那么就可以访问私有了