• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++友元函数与拷贝构造函数详解

C++友元函数与拷贝构造函数详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++拷贝构造函数,c++中拷贝构造函数,拷贝构造函数,拷贝构造函数怎么写,拷贝构造函数的作用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、友元函数

1.友元函数概述:

(1)友元函数是定义在一个类外的普通函数。
友元函数和普通函数的定义一样;在类内必须将该普通函数声明为友元。

(2)友元函数不是成员函数。
不能通过对象来调用,而是直接调用;友元函数可以访问类的公有、受保护以及私有成员,但是必须通过对象、对象指针或者对象引用来访问。

2.友元函数的声明:

friend 返回值类型 函数名(参数表);
在类中只需要将这个声明放置在公有部分即可。

class Point
{
double x, y;
public:
Point(){x = 0.0; y = 0.0;}
Point(double xx, double yy){x = xx; y = yy;}
friend double distance(Point, Point);//将distance函数声明为友元函数
};
double distance(Point my1, Point my2)
{
return sqrt((my1.x-my2.x)*(my1.y-my2.y));
}
</div>

3.友元函数在定义时即普通函数的定义,前面不加friend,在类内声明时,必须加friend.
在友元函数生效的对象的作用范围内可以访问私有、公有以及受保护成员。
main函数不能声明为类的友元函数,main函数只能做主调不能做被调。

二、拷贝构造函数:

1.拷贝构造函数概述:

(1)拷贝构造函数是一个构造函数,它属于类的成员函数(普遍定义为public);和类名同名但是无返回值;创建对象时,若该对象的初始化值是另一个同类对象时(赋值不调用)调用。

(2)拷贝构造函数的声明

类名::类名(类名 &对象引用名); 或另一种声明方式
类名::类名(const 类名 &对象引用名)
注意:拷贝构造函数只有一个参数,而且参数必须是一个对象的引用;每个类其实都要有一个拷贝构造函数,若没有显式的定义,那么系统会自动定义并且设置其属性为公有。

2.示例程序:

class Point
{
int x, y;
public:
Point(){x = 0; y = 0;}
Point(int xx, int yy){x = xx; y = yy;}
Point(Point &pf){x = pf.x; y = pf.y;}//拷贝构造函数的声明可以省略第一个类名和::
};
Point(Point &pf)
{
*this = pf; //完成拷贝构造
}
int main()
{
Point p1; //调用无参构造
Point p2(3, 4); //调用构造
Point p3(p2); //调用拷贝构造
}
</div>

注意:如果没有使用const修饰,那么出现pf.x=8这种语句是合法的,但是加了const之后是非法的。另外,引用完pf也会释放。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入理解C/C++中的写时拷贝
  • C++ 构造函数中使用new时注意事项
  • C++基础教程之指针拷贝详解
  • C++ 赋值构造函数注意点介绍
  • c++ 构造函数中调用虚函数的实现方法
  • C++ 类的构造函数详解及实例
  • C++聚合关系类的构造函数的调用顺序详解
  • 解析C++中构造函数的默认参数和构造函数的重载
  • 深入讲解C++中的构造函数
  • C++中构造函数重载

相关文章

  • 2017-05-28linux c模拟ls命令详解
  • 2017-05-28Microsoft Visual C++ 程序的部署方法
  • 2017-05-28C++实现从输入中读取字符串
  • 2017-05-28解析C++中的for循环以及基于范围的for语句使用
  • 2017-05-28C++中的对象指针总结
  • 2017-05-28算法详解之分治法具体实现
  • 2017-05-28纯C语言:分治快速排序源码分享
  • 2017-05-28函数式宏定义与普通函数的区别
  • 2017-05-28C++ 简单的任务队列详解
  • 2017-05-28深入理解C预处理器

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++如何通过ostringstream实现任意类型转string
    • C语言可变参数函数详解示例
    • c/c++中变量的声明和定义深入解析
    • C++编程中指针的声明与基本使用讲解
    • 基于malloc与free函数的实现代码及分析
    • 解析C++的线性表链式存储设计与相关的API实现
    • Linux线程管理必备:解析互斥量与条件变量的详解
    • k均值算法c++语言实现代码
    • C++求Fib数列
    • C语言 实现遍历一个文件夹的所有文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有