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



一般一个类中有私有(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. bzoj2208

    首先有向图的题目不难想到先tarjan缩点 一个强连通分量中的点的连通数显然是相等: 据说这样直接dfs就可以过了,但显然不够精益求精 万一给定的是一个完全的DAG图怎么办,dfs铁定超时: 首先想, ...

  2. wps 2012-2013 通杀漏洞(CVE-2013-3934)

    测试方法: 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! #!/usr/bin/python # Exploit Title: Kingsoft Office Writer ...

  3. sqliteExpert软件使用(创建数据库和表)

    sqliteExpert是sqlite数据库的可视化操作软件,通过该软件可以进行可视化的创建数据库以及表,免去了复杂的建表语句.首先在下面地址下载该软件http://www.ddooo.com/sof ...

  4. LightOJ 1074 Extended Traffic SPFA 消负环

    分析:一看就是求最短路,然后用dij,果断错了一发,发现是3次方,有可能会出现负环 然后用spfa判负环,然后标记负环所有可达的点,被标记的点答案都是“?” #include<cstdio> ...

  5. xcodebuild导出ipa方法

    xcode 5.x版本导出ipa是不需要开发者账号,而xcode6以后导出ipa必须要求选择开发者team,无法绕开,但我们使用xcodebuild命令行可以无视这个限制 环境: mac osx 10 ...

  6. 动态加载JS脚本的4种方法

    实现OPOA(One Page One Application)时,必须使用动态加载js. 也就是在用户选择某个菜单项后,再动态加载对应的全部js到客户端. 动态加载js的情况很多啊,比如解决ajax ...

  7. HUD-4602 Partition 排列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 把n等效为排成一列的n个点,然后就是取出其中连续的k个点.分两种情况,一种是不包含两端,2^( ...

  8. Nexus5如何手动OTA更新系统到4.4.3、4.4.4及常见问题回答

    这里将记录一套行之有效的Nexus5手动升级方法,以帮助看见这篇文章的朋友成功将手头的Nexus5升级到4.4.4. 因为谷歌服务器的事,我的这次OTA更新起来走了很多弯路.我试过挂VPN等待系统来更 ...

  9. tail -f logfile.log 一直监控某个文件,若该文件有改动,立即在屏幕上输出

    tail -f logfile.log 可以一直监控某个文件,只要文件有改动,就立即在屏幕上输出

  10. vmware 8下ubuntu 13.04安装vmware tools

    在虚拟机vmware 8.0里安装了ubuntu 13.04.为了方便与主机交互,安装vmware tools. 解压后直接运行 ./vmware-install.pl 一路默认路径安装下来,到&qu ...