c++ 友元函数 还是不能访问私有成员。。
#include<iostream>usingnamespacestd;constfloatPI=3.141593;classCylinder;classCircle{C...
#include<iostream>
using namespace std;
const float PI=3.141593;
class Cylinder ;
class Circle {
Circle(double,double ,double );
private:
double x;
double y;
double r;
public:
friend void Cylinder::Volume(Circle&ci) ;
~Circle();
};
class Cylinder
{
private:
double h;
public:
void Volume(Circle&ci)
{ double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
} ;
};
int main(){
Circle ci(12.0,15.0,10.0);
Cylinder cy ;
cy.Volume(double,10.0) ;
return 0;
} 展开
using namespace std;
const float PI=3.141593;
class Cylinder ;
class Circle {
Circle(double,double ,double );
private:
double x;
double y;
double r;
public:
friend void Cylinder::Volume(Circle&ci) ;
~Circle();
};
class Cylinder
{
private:
double h;
public:
void Volume(Circle&ci)
{ double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
} ;
};
int main(){
Circle ci(12.0,15.0,10.0);
Cylinder cy ;
cy.Volume(double,10.0) ;
return 0;
} 展开
4个回答
展开全部
circle 构造函数默认不加修饰符为private 。
Circle ci(12.0,15.0,10.0); 这句会出现error C2248: 'Circle::Circle' : cannot access private member declared in class 'Circle' 。
你这个例子真正的问题是 出现了对象间相互引用 ,这个问题好像有点复杂 ,,, 自己再查查 。
友元出现 就是为了访问私有成员,破坏类的封转保护机制的。
Circle ci(12.0,15.0,10.0); 这句会出现error C2248: 'Circle::Circle' : cannot access private member declared in class 'Circle' 。
你这个例子真正的问题是 出现了对象间相互引用 ,这个问题好像有点复杂 ,,, 自己再查查 。
友元出现 就是为了访问私有成员,破坏类的封转保护机制的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码修改如下:
#include<iostream>
using namespace std;
const float PI=3.141593;
class Circle;
class Cylinder{
private:
double h;
public:
Cylinder(double h1) :h(h1){} // 构造函数
void Volume(Circle&ci); // 先声明,函数定义写在Circle定义的后面
};
class Circle{
private:
double x; double y; double r;
public:
Circle(double x1,double y1,double r1) :x(x1),y(y1),r(r1){} // 构造函数
friend void Cylinder::Volume(Circle&ci) ; // ok,声明为友元函数
};
void Cylinder::Volume(Circle&ci) // 定义写在Circle后面,不然不能调用其成员
{
double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
}
int main()
{
Circle ci(12.0,15.0,10.0);
Cylinder cy(10.0) ;
cy.Volume(ci) ; // 调用
return 0;
}
#include<iostream>
using namespace std;
const float PI=3.141593;
class Circle;
class Cylinder{
private:
double h;
public:
Cylinder(double h1) :h(h1){} // 构造函数
void Volume(Circle&ci); // 先声明,函数定义写在Circle定义的后面
};
class Circle{
private:
double x; double y; double r;
public:
Circle(double x1,double y1,double r1) :x(x1),y(y1),r(r1){} // 构造函数
friend void Cylinder::Volume(Circle&ci) ; // ok,声明为友元函数
};
void Cylinder::Volume(Circle&ci) // 定义写在Circle后面,不然不能调用其成员
{
double m=PI*ci.r*ci.r*h;
cout<<"体积为"<<m;
}
int main()
{
Circle ci(12.0,15.0,10.0);
Cylinder cy(10.0) ;
cy.Volume(ci) ; // 调用
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以
追问
不行啊运行 不过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询