1.友元函数

2.友元类

3.继承(公有继承)

4.公有继承的访问权限

5.私有继承的访问权限

6.保护继承的访问权限(两次继承)

==友元函数==

#include <iostream>
using namespace std;
class love
{
public:
love(int you,int me);
friend int baby(love& );//################
private:
int Me;
int You;
};
love::love(int you,int me)
{
You = you;
Me = me;
}
int baby(love& refnum)
{
return refnum.You + refnum.Me ;//###########
}
int main()
{
love aini(500,21);
cout<<"我想对你说:"<<baby(aini)<<endl;
return 0;
}
==友元类==
#include <iostream>
using namespace std;
class Date; //声明Date类
class Time //定义Time类,描述时分秒
{
public:
Time(int con_hour, int con_minute, int con_second) //定义构造函数
{
m_nHour = con_hour;
m_nMinute = con_minute;
m_nSecond = con_second; }
friend class Date; //声明Date为Time的友元类
private:
int m_nHour, m_nMinute, m_nSecond;
};
class Date //定义Date类
{
public:
Date(int con_year, int con_month, int con_day)//定义构造函数
{
m_nYear = con_year;
m_nMonth = con_month;
m_nDay = con_day;
}
void display_date_time(Time &ref_time); //声明display_date_time()函数
private:
int m_nYear, m_nMonth, m_nDay;
};
/*
* 定义display_date_time()函数,显示年月日、时分秒信息。由于Date为Time类的友元类,
* 则Date中的函数为Time类的友元函数,可以访问Time类的私有成员,
* 这里直接访问了私有成员:m_nHour、m_nMinute、m_nSecond
*/
void Date::display_date_time(Time &ref_time)
{
cout << m_nYear << "-" << m_nMonth << "-" << m_nDay << " "
<< ref_time.m_nHour << ":" << ref_time.m_nMinute//################
<< ":" << ref_time.m_nSecond << endl; //###############
}
int main()
{
Time time(17, 30, 20); //定义Time对象
Date date(2017, 2, 23); //定义Date对象
date.display_date_time(time); //显示年月日、时分秒信息
return 0;
}

==继承(公有继承)==
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
void speak()
{
cout<<"animal language."<<endl; }
};
class Dog :public Animal //继承Animal的属性
{
public:
Dog (string con_name):m_Name(con_name){}
void print_name()
{
cout<<"con_name:"<<m_Name<<endl;
}
private:
string m_Name; };
int main()
{
Dog dog("dogoo");
dog.speak(); //调用其继承的Animal属性里的speak函数
dog.print_name();
return 0;
}
==公有继承的访问权限==
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
void set_weight(int weight){m_Weight = weight;}
int get_weight(){return m_Weight;}
void set_age(int age){m_Age = age;}
protected:
int m_Age; //protected成员可以被派生类访问
private:
int m_Weight; //私有成员被派生类不可访问
};
class Dog:public Animal
{
public:
Dog (string con_name):m_Name(con_name){}
void print_age(){ cout<<m_Name<<",age="<<m_Age<<endl; } //这里直接访问了//#################
private:
string m_Name;
};
int main()
{
Dog dog("dogoo");
dog.set_weight(6);
dog.set_age(8);
dog.print_age();
cout<<"weight ="<<dog.get_weight()<<endl; //这里通过继承基类成员函数输出weight值,不可直接访问
return 0; }
==私有继承的访问权限==
//把从基类继承的protected、public成员当做私有成员,主函数不能直接访问基类的成员
#include <iostream>
#include <string>
using namespace std;
class Animal
{
public:
void set_weight(int weight){m_Weight = weight;}
int get_weight(){return m_Weight;}
void set_age(int age){ m_Age = age; }
protected:
int m_Age;
private:
int m_Weight;
};
class Dog:private Animal
{
public:
Dog(string con_name):m_Name(con_name){}
void set_print_weight()
{
set_weight(6); //################
cout<<m_Name<<",weight = "<<get_weight()<<endl;
}
void set_print_age()
{
set_age(8); //#################
cout<<m_Name<<",age = "<<m_Age<<endl;
}
private:
string m_Name;
};
int main()
{
Dog dog("dogoo");
dog.set_print_weight(); //通过派生类的访问来访问基类成员
dog.set_print_age();
return 0;
}
==保护继承的访问权限(多重继承:类Animal——>次类Dog——>再次类Dog_plus)==
//把从基类继承的protected、public成员当做保护成员
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
class Animal
{
public:
void set_weight(int weight){m_Weight = weight;}
int get_weight(){return m_Weight;}
void set_age(int age){m_Age = age;}
protected:
int m_Age;
private:
int m_Weight;
};
class Dog:protected Animal //#################
{ public:
Dog(string con_name):m_Name(con_name){}
void set_print_weight()
{
set_weight(8);
cout<<m_Name<<",weight ="<<get_weight()<<endl;
}
private:
string m_Name;
};
class plus_Dog:protected Dog //###################
{
public:
plus_Dog():Dog("dogoo"){ }
void plus_set_print_age()
{
set_age(6);
cout<<"The plus_dog age = "<<m_Age<<endl;
} };
int main()
{
plus_Dog plus_dog;
plus_dog.plus_set_print_age();
system("pause");
return 0;
}

C++知识点案例 笔记-2的更多相关文章

  1. C++知识点案例 笔记-6

    1.三种友元函数 -非模板友元函数 -约束模板友元函数 -非约束模板友元函数 2.非类型参数 3.模板特化 1.三种友元函数 =====三种友元函数===== --1---非模板友元函数 #inclu ...

  2. C++知识点案例 笔记-5

    1.关系运算符重载 2.类型转换函数重载 3.转换构造函数 4.函数模板 5.显式实例化 6.类模板外定义模板函数 1.关系运算符重载 ==关系运算符重载== //直接(按分数)比较两个对象 #inc ...

  3. C++知识点案例 笔记-4

    1.纯虚函数 2.抽象类 3.内部类 4.运算符重载 5.类的函数重载 6.友元的函数重载 1.纯虚函数 ==纯虚函数== //有时基类中无法给出函数的具体体现,定义纯虚函数可以为派生函数保留一个函数 ...

  4. C++知识点案例 笔记-3

    1.基类指针等与派生类的兼容 2.构造函数 3.析构函数 4.虚基类 5.虚函数 6.虚析构函数 ==基类指针等与派生类的兼容== #include <iostream> #include ...

  5. C++知识点案例 笔记-1

    1.重载函数 2.内联函数 3.New.Delete 4.重载与.const形参 5.常数据成员 6.静态成员函数 ==重载函数== #include <iostream> using n ...

  6. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  7. [置顶] 单片机C语言易错知识点经验笔记

    今天写这一篇文章并不是因为已经想好了一篇文章才写下来,而是我要将这一篇文章作为一个长期的笔记来写,我会一直更新.在进行单片机开发时,经常都会出现一些很不起眼的问题,这些问题其实都是很基础的c语言知识点 ...

  8. 面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记

    文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工 ...

  9. php 知识点 --个人笔记

    ##2015-09-06 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这时候, ...

随机推荐

  1. 2020 OO 第一单元总结 表达式求导

    title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...

  2. ubuntu apt出错

    whitedream@ubuntu:~$ sudo apt-get update Reading package lists... Done E: Could not get lock /var/li ...

  3. 数据库MySQL三

    进阶4:常见函数 字节长度为12,一个汉字3个字节 8个字符 注意起始索引 1 -1 0 红色是记忆的 二.数学函数 当前日期包括时间 获取日期 获取时间 四.流程控制函数 案例 分组函数 单行函数: ...

  4. 生产环境中的redis是怎么部署的?

    redis cluster,10台机器,5台机器部署了redis主实例,另外5台机器部署了redis的从实例,每个主实例挂了一个从实例,5个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每 ...

  5. java面试一日一题:请讲下对mysql的理解

    问题:请讲下对mysql的理解 分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程 回答要点: 主要从以下几点去考虑, 1.mysql的整体架构? 2.mysql中每一个组件的作用? ...

  6. SpringBoot+Dubbo+Zookeeper 实例

    前言 当下Java 生态环境里面,微服务占据了非常大的份额,现在大部分新开发的 Java选型的后台程序都很奇妙的会跟微服务发生一些关系.那目前市面上主流的微服务方向主要有 Spring 家族推出的Sp ...

  7. Java基础练习——读心术(扑克牌魔术——21张扑克牌)

    Java基础练习--读心术(扑克牌魔术--21张扑克牌) 用到了Scanner,for循环,if-else语句,集合,线程的Thread.sleep()方法 话不多说,直接上代码!

  8. Prime Ring Problem UVA - 524

    A ring is composed of n (even number) circles as shown in diagram. Put natural numbers 1,2,...,n int ...

  9. Mysql通配符的使用

    通配符的分类:%百分号通配符: 匹配任意字符,包括0个到多个_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.    escape:用来转义特定字符 [字符列]  :字符列中任何一个 ...

  10. Wordpress学习链接整理

    Wordpress学习链接整理 获取和使用 WordPress 中的全局变量 wordpress模板加载顺序汇总 WordPress载入页面时的模板加载机制(图) WordPress 条件判断标签及用 ...