C++语言债券系列之十一——友元函数和拷贝构造函数
1.好友功能
(1)友元函数类的普通功能外定义。
定义友元函数和相同的正常功能。在类必须声明的正常功能为好友。
(2)友元函数不是一个成员函数。
你不能反对打电话。但直接调用;友元函数访问类的公共、protected和private成员,必须通过对象、对象指针或者对象引用来訪问。
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));
}
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); //调用拷贝构造函数
}
注意:假设没有用const修改。看来pf.x=8这种说法是合法的,但他补充说const违法后。其他。最终报价pf也释放。
C++语言债券系列之十一——友元函数和拷贝构造函数的更多相关文章
- [Reprint]C++友元函数与拷贝构造函数详解
这篇文章主要介绍了C++友元函数与拷贝构造函数,需要的朋友可以参考下 一.友元函数 1.友元函数概述: (1)友元函数是定义在一个类外的普通函数.友元函数和普通函数的定义一样;在类内必须将该普通函 ...
- 《剑指offer》面试题1:为类CMyString添加赋值运算符函数——C++拷贝构造函数与赋值函数
题中已给出CMyString的类定义,要求写赋值运算符函数. #include<iostream> #include<cstring> using namespace std; ...
- SQL系列(十一)—— 函数(function)
SQL中的函数也非常多,而且不同的DBMS提供了相应的特殊函数.但是常用的共性函数大致可以分为以下几种: 函数类型 函数 数值函数 1.算术计算:+.-.*./ 2.数值处理:ABS()绝对值处理.P ...
- C++雾中风景6:拷贝构造函数与赋值函数
在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数.初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容.这篇文章我们会详细来梳理拷贝构造函数与赋值函数的区别. 1.调用了 ...
- 【C++】拷贝构造函数和赋值符函数
在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...
- C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)
这里我们用类String 来介绍这两个函数: 拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式 ...
- c/c++ 模板与STL小例子系列<二> 模板类与友元函数
c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...
- 智能合约语言 Solidity 教程系列10 - 完全理解函数修改器
这是Solidity教程系列文章第10篇,带大家完全理解Solidity的函数修改器. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编 ...
- Go语言入门系列(六)之再探函数
Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...
随机推荐
- appendChild的用法
appendChild的用法 1,先把元素从原有父级上删除 2,再把元素添加到新父级上
- Android 学习历程摘要(二)
1.资源文件命名仅仅能小写,否则会报错生成不了R.java文件 2.R文件导包时应该导入自己project的包,而不是android.R 3.数据库操作使用SqliteOpenHelper 4.val ...
- 移动web:翻页场景动画
在移动web,特别是在微信中,经常看到一种翻页动画效果,也称为场景动画. 一页一页的翻过,像在看书,每页的内容以各种"炫酷"的效果出现在你的眼里,配上一首动听的音乐,你有没有喜欢上 ...
- Web API Test Client 1.2.0
使用方法 1 安装 matthewcv.WebApiTestClient 到你的Web API 项目 PM> Install-Package matthewcv.WebApiTestClient ...
- Shuttle ESB 实践
http://blog.csdn.net/liu765023051/article/category/2482069
- linux shell中间$0,$?,$!和<<'END'
变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $? 最后执行的命令结束码(回报值) $- 使用Set命令设定的Flag一览 $* 全 ...
- C# 开机自动启动程序
原文:C# 开机自动启动程序 新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_Ch ...
- 配置Tomcat出现Unsupported major.minor version 51.0
在配置tomcat时,配置好jdk1.6,下载的tomcat8.0,结果执行start-up.bat,总是一闪而过,网上查了大量的资料,都说是可能是jdk没配置好,但实际上jdk的环境变量设置正常,后 ...
- 【转】JTree调用UpdateUI()抛空指针
最近在做东西时发现,当在线程里面刷新JTree时,有时会出现空指针错误,在网上查了很久,终于发现以下解决方法: JTree中调用UpdateUI()报以下错误 java.lang.NullPointe ...
- 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]
采用当今项目hql询问.出现 QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ...