社区
C++ 语言
帖子详情
请问在C++中友元是啥? 还有虚函数是啥?
S海鸥
2004-04-29 09:20:05
请问在C++中友元是啥? 还有虚函数是啥?
它们在什么时候用到? 有什么作用? 请举例? 谢!
...全文
196
16
打赏
收藏
请问在C++中友元是啥? 还有虚函数是啥?
请问在C++中友元是啥? 还有虚函数是啥? 它们在什么时候用到? 有什么作用? 请举例? 谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2004-04-30
打赏
举报
回复
请问在C++中友元是啥? 还有虚函数是啥?
1、friendship 2、virtual function
它们在什么时候用到? 有什么作用? 请举例? 谢!
1、在编程的时候用到。作用:增加了复杂度。例子:如果没有它们就没有这个帖子了。
cyy219
2004-04-30
打赏
举报
回复
注意:基类成员可以调用派生类中重新定义的虚函数,但构造函数却只能调用本类中定义的虚函数,而不能调用派生类中重新定义的虚函数,因为当时可能还没有建立派生类的对象。
??能不能举个例子说明一下?
liushl2001
2004-04-30
打赏
举报
回复
顶起!!
liem
2004-04-30
打赏
举报
回复
什么是友元?所谓友元就是经授权,可以访问本类私有成员的外部函数(非本类成员函数)
授权方式:在本类中用friend声明
hslinux
2004-04-30
打赏
举报
回复
HOHOHO~~~~~~~~~~~~~~~~~~
jmlt1983
2004-04-30
打赏
举报
回复
简单点就是,虚拟函数只是告诉你将会有些什么样的方法(函数)在基于这个抽象接口上实现,具体方法不再此接口中实现
friendship就是这个函数不是此类的成员函数,他不能访问此类中封装的数据,但是当他加入了friend声明之后,他就可以访问这些已经封装的数据。很多的经典的计算机图书中都说它破坏了类的封装性,不过这也不是什么不好的,毕竟c++实现了很多的面向对象的大胆尝试,而且为了兼容c,当然有很多不是很纯的“面向对象”。友元就是这样
Wolf0403
2004-04-30
打赏
举报
回复
如果把“告知施工队房子的地址”这个过程当作一个“工厂模式”,那么 C++ 的虚函数更像是一个“抽象工厂模式”。客户代码要求一个函数调用,工厂返回的不是一个对象,而是一个能够产生最后对象的工厂(虚表),再从这里得到最后的产品(函数地址)
hardstudylulin
2004-04-30
打赏
举报
回复
给大家讲个刷房子的故事,将来开公司可能会应用这种思想:
有一家装潢公司接到一个给房子刷油漆的大单子,很大的单子,可能有10000间房子需要刷不同颜色的油漆。如果你是老板,你会如何合理调配你的资源?以最小的成本、最快的速度,完成任务!你会想到把的施工队分成n(颜色数)队,当你接到任务后,先获知房子的颜色,派出相对应的施工队,同时给他们房子的地址,和一些附加信息。这样你的施工队将会很高效的运作起来,事物因分类而简单。
故事中你的角色相当于虚函数机制的分配者,而你分配的正是实现者的指针。
cai114
2004-04-29
打赏
举报
回复
虚函数可减小代码量,
友元可方问一些private.
lj197912
2004-04-29
打赏
举报
回复
如果需要通过基类的指针指向派生类的对象,并访问某个与基类同名的成员,那么首先要在基类中把这个同名函数说明为虚函数,这样可以实现多态
sueprljy
2004-04-29
打赏
举报
回复
楼上已经有人说的很清楚了,如果楼主想进一步了解友元和虚函数,建议找一些例子来讨论讨论,彼此学习。
lj197912
2004-04-29
打赏
举报
回复
友元类
class B
{
...
friend class A;//声明A为B的友元类
....
};
若A 为B的友元类,那么A类的所有成员函数都是B的友元函数,都可以访问B的私有和保护成员
RichardSong2003
2004-04-29
打赏
举报
回复
楼上这位老兄讲得很好,很受启发!!!
lj197912
2004-04-29
打赏
举报
回复
友元提供了不同类或对象的成员函数之间、类的成员函数于一般函数之间进行数据共享的机制 。通过友元,一个普通函数或者类的成员函数可以访问到封装于某一类中的数据。
class point
{
public:
point(int xx=0,int yy=0){x=xx;y=yy;}
friend float fdist(point &a,point &b);
private:
int x,y;
};
float fdist(point &p1,point &p2)
{
double x=double(p1.x-p2.x);//友元函数可以通过对象名访问类的私有和保护成员
......
shadow22
2004-04-29
打赏
举报
回复
以C++中,我们是通过将一个函数定义成虚函数来实现运行时的多态的。如果一个函数被定义为虚函数,那么,即使是使用指向基类对象的指针来调用该成员函数,C++也能保证所调用的是正确的特定于实际对象的成员函数。
如果类c1,c2...由基类base派生而来,base有一个用virtual修饰的公有或保护函数成员f(),而在c1,c2...中的一些类中重新定义了成员函数f(),而对f()的调用都是通过级基类的对象或指针进行的,在程序执行时才决定是调用c1还是c2或其它派生类中定义的f()。这样的函数f()称为虚函数。
让我们通过以下的例子来理解虚函数的概念:
class base {
public:
virtual void f();
};
class derived : public base {
... //没有重定义f()
};
class derived1 : public derived {
public:
void f();
}
下面是调用的例子,注意可用成员名强制实行静态联编。
derived1 d1;
derive& d=d1;
d.f(); //调用derived1::f()
base& b=d1;
b.f();//调用derived1::f()
d.derived::f();//调用base::f()
b.base::f();//调用base::f()
派生类中重新定义的虚函数,不论访问权限是什么,都可被动态联编。
例如:
class base {
public:
virtual void f();
}
class derived : public base {
private:
void f();
}
虽然派生类derived中函数成员f()是私有的,但不影响以下的访问:
derived d;
base& b=d;
b.f();//调用derived::f()
注意:基类成员可以调用派生类中重新定义的虚函数,但构造函数却只能调用本类中定义的虚函数,而不能调用派生类中重新定义的虚函数,因为当时可能还没有建立派生类的对象。
shadow22
2004-04-29
打赏
举报
回复
友元可以是一个函数,该函数称为友元函数;友元也可以是一个类,该类被称为友元类。 1、友元函数 友元函数是能够访问类中的私有成员的非成员函数。
#include <iostream.h>
#include <math.h>
class Point
{
public:
Point(double xx,double yy) { x=xx;y=yy;}
void Getxy( );
friend double Distance(Point &a,Point & b);
private:
double x,y;
};
void Point::Getxy( )
{
cout<<”(“<<x<<”,”<<y<<”)”<<endl;
}
double Distance(Point &a,Point &b)
{
double dx=a.x-b.x;
//对象的私有成员一般只有成员函数才能访问,这里友元函数中允许访问对象的
//私有成员
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
void main( )
{
Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy( );
p2.Getxy( );
double d=Distance(p1,p2);
cout<<”Distance is”<<d<<endl;
}
输出结果:
(3,4)
(6,8)
Distance is 5
说明:该程序中的Point类中说明了一个友元函数Distance( ),它在说明时前面加上了friend关键字,标示它不是成员函数,而是友元函数。但是,它可以引用类中的私有成员,函数体中a.x,b.x,a.y,b.y都是类的私有成员,它们是通过对象引用的。在调用友元函数时,与普通函数的调用一样,不需要像成员函数那样调用。本例中,p1.Getxy()和p2.Getxy( )这是成员函数的调用,因此要用对象来表示。而Distance(p1,p2)是友元函数的调用,它可直接调用,不需要用对象表示。但如果在友元函数中处理数据成员,都必须使用对象参数。
【04737】2017年10月
C++
程序设计自考试题与答案解析
"
C++
程序设计自考试题与答案解析" 本资源是关于
C++
程序设计的自考试题与答案解析,涵盖了
C++
的基本概念、语法、数据类型、运算符、...这里讲解了
C++
中
友元
函数的机制,
友元
函数可以访问类的所有成员变量和成员函数。
安全程序设计期末考试样题
4.
C++
中
友元
函数和
友元
类的概念允许非成员函数或类访问类的私有成员,这在一定程度上破坏了封装性,但有时候可以提供方便。
友元
函数在
C++
中
不是成员函数,但是被授予了访问类私有成员的权限。 5.
C++
模板是一种...
当“
友元
”遇到“
虚函数
”
虚函数
和
友元
是
C++
中
两个很重要的概念,
友元
和
虚函数
经常会在同一程序
中
出现。下面是几点值得注意的知识。
友元
可以是一个函数,该函数被称为
友元
函数;
友元
也可以是一个类,该类被称为
友元
类...
【
C++
】
C++
类的其他特性(包括:
友元
函数、
虚函数
)
本文主要介绍类的
友元
函数、
虚函数
、静态成员、const对象和volatile对象以及指向类成员的指针。
友元
函数 从之前的文章可知,当把类
中
的成员的访问权限定义为私有的或者保护的时,在类的外面,只能通过该类的...
C++
中
的
友元
函数
什么是
友元
函数?
友元
函数(与成员函数相对)是定义在类外部,可以访问该类
中
的所有私有(private)成员和保护(protected)成员。指定函数为某个类的
友元
函数的方法是使用关键字friend。 friend <返回类型>...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章