c++ 友元类的参数问题

问题描述

c++ 友元类的参数问题
#include
#include
using namespace std;

class Point
{
public:
Point (int x=0int y=0):x(x)y(y){cout<<""构造函数被调用""<<endl;}
Point (Point &p){cout<<""复制构造函数被调用""<<endl;x=p.x;y=p.y;}
friend double dist(Point &p1Point &p2);
private:
int xy;
};

double dist(Point &p1Point &p2)
{
double x=p2.x-p1.x;
double y=p2.y-p1.y;
return sqrt(x*x+y*y);
}
int main()
{
Point mp1(11)mp2(45);
cout<<""len=""<<dist(mp1mp2)<<endl;
return 0;
}

#include
#include
using namespace std;

class Point
{
public:
Point (int x=0int y=0):x(x)y(y){cout<<""构造函数被调用""<<endl;}
Point (Point &p){cout<<""复制构造函数被调用""<<endl;x=p.x;y=p.y;}
friend double dist(Point p1Point p2);
private:
int xy;
};

double dist(Point p1Point p2)
{
double x=p2.x-p1.x;
double y=p2.y-p1.y;
return sqrt(x*x+y*y);
}
int main()
{
Point mp1(11)mp2(45);
cout<<""len=""<<dist(mp1mp2)<<endl;
return 0;
}

为什么把dist的参数前面的地址符去掉结果变了
求大神指点

解决方案

c++ 友元类&友元函数
C++ 友元函数与友元类
c++友元类

解决方案二:
double dist(Point &p1Point &p2),该函数的形式参数,相当于是给实参取别名。
double dist(Point p1Point p2),该函数的形式参数,需要创建局部变量,并将实参的值复制到局部变量中。
Point p1 = mp1,相当于是调用了函数Point (Point &p)。
Point p2 = mp2,也相当于调用了函数Point (Point &p)。
Point (Point &p)该函数叫做拷贝构造函数。

具体可以查看一下C++拷贝构造函数相关知识。

解决方案三:
建议好好去补补c++ 的基础知识,引用是基本语法中的...

时间: 2024-11-01 06:23:11

c++ 友元类的参数问题的相关文章

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

剖析C++编程中friend关键字所修饰的友元函数和友元类_C 语言

在某些情况下,为不是类成员的函数或单独类中的所有函数授予成员级别的访问权会更方便.仅类实现器可以声明其友元.函数或类不能将其自身声明为任何类的友元.在类声明中,使用 friend 关键字和非成员函数名称或其他类,以允许其访问你的类的专用和受保护成员.语法 friend class-name; friend function-declarator; 友元声明如果声明以前未声明的友元函数,则该函数将被导出到封闭非类范围. 友元声明中声明的函数被视为已使用 extern 关键字声明.(有关 exter

C++学习摘要之六:友元函数与友元类

采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为 公有的,依此提供类与外界间的通信接口.但是,有时需要定义一些函数,这些函数不是类的一部分,但 又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数.除了友元函数外,还有 友元类,两者统称为友元.友元的作用是提供了工序的运行效率,但又破坏了类的封装性. 1.友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类 ,但需要在类的定义中加以声明,声明时

解决友元类(friend class)无法继承的问题

解决友元类(friend class)无法继承的问题   友元声明friend class是无法继承的.举例说明:class A声明class B为其友元类,也就是说class A授予class B访问class A的所有包括私有成员在内的所有成员.如果class C 继承class B.那么class C是不具备这种特权的.     但是如果我想在class C中访问class A的某个私有或者保护成员函数怎么办? 我们可以把工作交给父类.   #include <iostream> usi

java当中的泛型类问题,类泛型参数是类的问题

问题描述 java当中的泛型类问题,类泛型参数是类的问题 类1<类2> 这样子写的话 类1和类2的选取范围是什么类<类>类的泛型是类的本身,这种写有错吗 解决方案 一般来讲,我们用到"类1<类2>"这样的形式的Java语句,通常是希望将范围比较大的类1里面所包含的内容规范化成类2:举个简单的例子,我们通常会在创建集合的时候限定集合里面的内容的类型,如:List.这意味着这个List集合里的内容都是字符串类型,而不会是Long或其他,这样就会在我们操作

C++之:友元类

一.文章来由 上一篇写了友元函数,这一次写一个姊妹篇,继续深入探究一下友元类. 二.定义 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员). 当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类.定义友元类的语句格式如下: friend class 类名; 其中:friend和class是关键字,类名必须是程序中的一个已定义过的类. 三.例子 #include <iostream> using namespace std;

C++友元类实现

C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元.当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员. 请看实例: #include <iostream> #include <cstring> using namespace std ; //声明教师类 class Techer ; //学生类 class Student { private: string name ; int age ;

求c++大神,友元类,代码如下

问题描述 求c++大神,友元类,代码如下 #include#include#includeusing namespace std; class interviewee{public: friend class interviewer; interviewee(string ming1int age1string job1) { ming=ming1;age=age1;job=job1; } interviewee(){} friend showinfo(interviewee a) { cout

uml-C++UML图怎么表示一个类是另外一个类的友元类

问题描述 C++UML图怎么表示一个类是另外一个类的友元类 C++UML图怎么表示一个类是另外一个类的友元类,求大神帮助 解决方案 类成员函数声明为另外一个类的友元 解决方案二: UML中貌似没有友元这个概念 解决方案三: http://request.uml.com.cn/index.asp 看看里面怎么说的...