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



一般一个类中有私有(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. MVC——数据库增删改查(Razor)——Html语法

    一.显示界面 .Models(模板) private MyDBDataContext _context = new MyDBDataContext(); public List<Info> ...

  2. [swustoj 191] 迷宫逃离

    迷宫逃离(0191) 描述 江鸟突然想到了一个迷宫逃离的游戏,话说有三个人被困于一个n*m的迷宫里,他们三人都可以向上.向下.向左.向右四个方向进行走动,当然他们所在的初始位置没有障碍物,同时只能走到 ...

  3. zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210

    //zz//####################################################################### zz-rtl8188eu的linux-usb ...

  4. zzzz

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Management; u ...

  5. CCClippingNode bug

    在Cocos2d-x v2.x,CCClippingNode类有一个bug,导致区域裁剪失效,由于Cocostudio的UIScrollview组件是基于该类构建的,所以这个问题是比较常见的,fix的 ...

  6. 解决Mac下Sequel Pro 1.1 连接 Homebrew安装Mysql5.7.8的问题 Sequel Pro 1.1 encountered an unexpected error

    解决Mac下Sequel Pro 1.1 连接 Homebrew安装Mysql5.7.8的问题 Sequel Pro encountered an unexpected error Sequel Pr ...

  7. 如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖

    关于如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖 以及在Mac App上使用Cocoapods的时候遇到Library not found for -lPods时的解决办法 ...

  8. mac使用初级

    imac使用的是login shell,所有开启一个terminal的时候,不会运行.bashrc文件,而是运行.bash_profile文件,因此只需要中home目录新建一个.bash_profil ...

  9. glusterfs 术语

    Access Control Lists Access Control Lists (ACLs) allows you to assign different permissions for diff ...

  10. linux多线程编程(转)

    原文地址:http://www.cnblogs.com/BiffoLee/archive/2011/11/18/2254540.html 1.Linux“线程” 进程与线程之间是有区别的,不过Linu ...