友元:友好的元子,,,,呵呵呵



一般一个类中有私有(private),公有(public),和保护(protected)三种类型成员,而只有public成员才可以在类外被随便访问,protected只能在继承子类中访问。一般要访问私有成员要通过公有

函数提供的接口来访问,这符合面向对象的封装思想,但是有一种情况就例外,那就是-友元。

什么事友元;友元就是可以访问它友好类中的私有成员,包括友元类和友元函数,友元类又包括一般类和嵌套类,友元函数又包括,一般普通函数,和类的成员函数。一般在声明友元类时要先声明类。在使用对象的时候必须先声明,在特殊情况下,正式时声明类之前要使用类名,所以在声明友元类之前先声明类,然后再去实现类,这种情况下, 类的提前声明的使用范围是有限的。只有在正式声明一个类以后才能用它去定义类对象。声明友元是在类体中加关键字(friend)声明.在友元类中或者友元函数中就可以访问类中的私有成员了。


#include<iostream>

using namespace std;

class Date;

class Time

{

        public:

                Time(int h,int m,int s):hour(h),minute(m),second(s){

                        

                }

        private:

                int hour;

                int minute;

                int second;

        public:

                void display(Date &);

        

};

class Date

{

        public:

                Date(int,int ,int);

                friend void Time::display(Date &);

        private:

                int mouth;

                int day ;

                int year;

        

};

void Time::display(Date &d)

{

        cout<<d.mouth<<"/"<<d.day<<"/"<<d.year<<endl;

        cout<<hour<<":"<<minute<<":"<<second<<endl;

}

Date::Date(int m,int d,int y):mouth(m),day(d),year(y)

{

        

}

int main(void)

{

        Time t(10,50,04);

        Date d(07,29,2014);

        t.display(d);

        return 0;

}

  • sizeof不可以定义为标示符
  • 全局变量可以和局部变量同名。
  • 对于 char c[]="abcedfe"; sizeof(c);he strlen(c);的运算结果不同,sizeof要比strlen大一个单位,因为strlen() 函数忽略字符串最后的‘\0’ 结束符。
  • 内存分为,栈区,堆区,自由存储区,全局/静态区,常量存储区。全局变量和静态变量分配的地址位于全局/静态区。一般普通变量,局部变量,形参都分配在栈区,动态分配的位于堆区(使用new关键字 或者使用malloc()分配的空间,)由const关键字修饰的变量位于常量区,这里面也包括char *c="asdjfksdjflksd"。
  • 十进制化为十六进制,一般是先把十进制化为二进制,然后再把二进制化为十六进制,每四位二进制化为一位十六进制。
  • 使用malloc()开辟的空间必须使用free()释放,不然会造成内存泄露。

友元(friend)--初学篇的更多相关文章

  1. 人脸识别(初学篇)-VS2015+opencv3.2的配置

    初学人脸识别,感觉安装也是一个很大的麻烦. 写在这里记录一下吧 一:先安装好我们需要的软件 首先安装Vs2015,在官网或者csdn搜一下应该找的到. 安装步骤没有太多讲究. 点击exe文件,我选择的 ...

  2. (Java初学篇)IDEA项目新建流程和软件配置优化以及怎么彻底删除项目

    相信很多小伙伴们在初学 Java 时都会出现这样的情况,就是在网上一顿搜索加捣鼓终于把 JDK 和IDEA 这两款软件安装配置好,但是发现面对这个陌生的软件此时却无从下手,那么接下来我就给大家简单地介 ...

  3. Unity3d - 初学篇 Event Functions 的 继承 机制

    我们知道Start() Update() 等之类的 事件函数 在Unity 主线程中是依次调用的.至于调用的顺序可以查手册. 由此继承机制也会发生一些改变. 测试一: public class MyT ...

  4. linux signal之初学篇

    前言 本博文只总结signal的应用,对signal的kernel实现暂不讨论. 1. linux signal是什么? signal是linux提供的用于进程间通信的一种IPC机制. 2. 如何发送 ...

  5. Java历程-初学篇 Day09 冒泡排序

    冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...

  6. Java历程-初学篇 Day08 数组

    一,什么是数组 所谓数组,是相同数据类型的元素按一定顺序排列的集合.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用 ...

  7. Java历程-初学篇 Day07 循环结构2 for循环

    一,格式 for(赋值语句//为循环变量赋初值;条件语句//循环结构的循环条件;赋值语句//迭代,修改循环变量的值){ //循环体; } 二,简单举例 for(int i=1;i<=10;i++ ...

  8. Java历程-初学篇 Day06 循环结构

    前记:永远不要写死循环 一,while循环 先判断,再执行 while(条件){ //代码块; 迭代; } 示例: 二,do while语句 先执行一次,再判断 do{ //代码块; 迭代; }whi ...

  9. Java历程-初学篇 Day05选择结构(2)

    一,switch 由于本作者学的是jdk6.0版本,我知道7.0可以使用字符串,但是我就不改了 语法: switch(char类型/int类型){ case 值: //输出 break; ... de ...

随机推荐

  1. 利用if else判断是否及格

    static void Main(string[] args)        {            while (true)            {                string ...

  2. HTTP2.0那些事

    1. HTTP2.0的前世 http2.0的前世是http1.0和http1.1这两兄弟.虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼.http1 ...

  3. Shape 与 InlineShape 的区别

    Shape 对象代表文档中的图形对象,InlineShape 代表文档中的嵌入式图形对象.所谓嵌入式图形对象,是指将图像作为文字处理,在排版上以文字的方式进行排版. Shape 与 InlineSha ...

  4. 安全delete,添加refenerce,release

    #ifndef SAFE_ADDREF#define SAFE_ADDREF(p)    if (p != NULL) { p->AddRef(); }#endif #ifndef SAFE_R ...

  5. [转]ASP.NET MVC 入门8、ModelState与数据验证

    ViewData有一个ModelState的属性,这是一个类型为ModelStateDictionary的ModelState类型的字典集合.在进行数据验证的时候这个属性是比较有用的.在使用Html. ...

  6. [liu yanling]测试用例的设计方法

    一.功能测试      1.对话框测试输入进行测试.包括中文字符.英文字符.数字字符.特殊字符.及几种字符的组合.      2.对界面可操作按钮进行测试.包括[新增(N)][保存(S)][修改(M) ...

  7. 【原】Arrays.binarySearch() 的用法

    Arrays.binarySearch() 的用法 1.binarySearch(Object[] a, Object key) Searches the specified array for th ...

  8. Storm系列(十八)事务介绍

    功能:将多个tuple组合成为一个批次,并保障每个批次的tuple被且仅被处理一次. storm事务处理中,把一个批次的tuple的处理分为两个阶段processing和commit阶段. proce ...

  9. 【Java基础】List迭代并修改时出现的ConcurrentModificationException问题

    现在有一个需求,要遍历一个List,假设List里面存储的是String对象,然后该需求事判断里面如果有某个对象,则添加一个新的对象进去.自然,我们得出下面的代码: import java.util. ...

  10. Dynamices CRM JS 类库 神器 XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library

    XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library http://xrmservic ...