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++语言债券系列之十一——友元函数和拷贝构造函数的更多相关文章

  1. [Reprint]C++友元函数与拷贝构造函数详解

    这篇文章主要介绍了C++友元函数与拷贝构造函数,需要的朋友可以参考下   一.友元函数 1.友元函数概述: (1)友元函数是定义在一个类外的普通函数.友元函数和普通函数的定义一样;在类内必须将该普通函 ...

  2. 《剑指offer》面试题1:为类CMyString添加赋值运算符函数——C++拷贝构造函数与赋值函数

    题中已给出CMyString的类定义,要求写赋值运算符函数. #include<iostream> #include<cstring> using namespace std; ...

  3. SQL系列(十一)—— 函数(function)

    SQL中的函数也非常多,而且不同的DBMS提供了相应的特殊函数.但是常用的共性函数大致可以分为以下几种: 函数类型 函数 数值函数 1.算术计算:+.-.*./ 2.数值处理:ABS()绝对值处理.P ...

  4. C++雾中风景6:拷贝构造函数与赋值函数

    在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数.初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容.这篇文章我们会详细来梳理拷贝构造函数与赋值函数的区别. 1.调用了 ...

  5. 【C++】拷贝构造函数和赋值符函数

    在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...

  6. C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)

    这里我们用类String 来介绍这两个函数: 拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式 ...

  7. c/c++ 模板与STL小例子系列<二> 模板类与友元函数

    c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...

  8. 智能合约语言 Solidity 教程系列10 - 完全理解函数修改器

    这是Solidity教程系列文章第10篇,带大家完全理解Solidity的函数修改器. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编 ...

  9. Go语言入门系列(六)之再探函数

    Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...

随机推荐

  1. FTP文件操作之下载文件

    前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了.所以今天就跟大家一起学习学习使用ftp下载文件. 知道了怎么上传,那么下载也就变得很简单了,上传是把文 ...

  2. Flex发行2048游戏

    近来的2048像挺火的游戏.在公交车,吃.甚至还有人走在路上拿着手机在玩.之前我看我的同事们戏,我认为这是很天真,中移动太无聊了吧 到后面,他是在,我觉得真的很无聊,这时候,无聊的时候无聊,后来我想用 ...

  3. 【C语言】推断一个数的奇偶(位操作)

    //推断一个数的奇偶 #include <stdio.h> int is_signal(int num) { if (num & 1) return 1; else return ...

  4. memset功能的具体说明

    1.void *memset(void *s,int c,size_t n)总的效果:内存空间开辟了 s 第一 n 字节的值设置为一个值 c. 2.样本#include void main(){cha ...

  5. windbg检查常用命令

    1.dt  视图结构内容 dt + 结构名   要么 dt + 结构名 + 住址 kd> dt _object_header nt!_OBJECT_HEADER +0x000 PointerCo ...

  6. datagrid直接编辑保存“设计缺陷”

    当今使用easyUI的datagrid组件的时候,碰到了一些问题,记录下来以便下次高速解决. 需求是在一张表单里会关联有一个列表,能够增删查改 曾经没用easyUI的时候,这个增和改的页面我通常是用一 ...

  7. grep在一个特定的文件搜索文件夹keyword

    grep -R --include="*.*"(文件名匹配)  key(keyword) dir(夹) eg.在当前文件夹搜索xml关键文件172.19.32.22 grep -R ...

  8. ATL 创COM物

    我原来以前写dll创建过程,而直接使用LoadLibrary加载动态库. 但ATL提出了一个非常重要的特点是引入COM对象的概念. 首先. ATL active template library该活动 ...

  9. ServletWeb缓存解决问题

    (1)为什么我们要防止这个问题的浏览器页面缓存: 所以在不须要缓存的页面中须要实现不缓存页面. 代码例如以下: package com.lc.HttpTest; import java.io.IOEx ...

  10. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    原文:.NET 并行(多核)编程系列之六 Task基础部分完结篇 .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些 ...