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. Java中对象的生与灭- 核心篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中对象的生与灭- 核心篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦 简介 ...

  2. 201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...

  3. spring-cloud-oauth2 认证授权

    什么是OAuth2? OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该令牌在限定时间. ...

  4. 做个开源博客学习Vite2 + Vue3 (四)实现博客功能

    我们再来看一下管理类的设计. Composition API,就是组合API的意思,那么是不是应该把js代码分离出来,做成独立的管理类的形式呢? 这样代码可以更整洁一些,主要是setup里面的代码就不 ...

  5. Day06_28_Instanceof关键字 和 引用类型转换

    Instanceof关键字 和 引用类型转换 Instanceof 关键字 - instanceof 是 Java 的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean ...

  6. Day05_21_Constructor构造器

    Constructor 构造器 构造方法(构造函数,构造器) 构造方法又被称为 构造函数/构造器/Constructor 构造方法的语法结构: [修饰符列表] 构造方法名 (形式参数列表){ 构造方法 ...

  7. SQL Server 审计(Audit)

    审计(Audit)用于追踪和记录SQL Server实例,或者单个数据库中发生的事件(Event),审计运作的机制是通过捕获事件(Event),把事件包含的信息写入到事件日志(Event Log)或审 ...

  8. 路由器逆向分析------binwalk工具的安装

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/65441110 一.binwalk工具运行支持的平台 binwalk工具安装支持的平 ...

  9. hdu4561 连续最大积

    题意: 连续最大积 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  10. 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...