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. Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(四):客户端强类型约束,自动生成 API TS 类型定义

    系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇 Go + gRPC-Gateway(V2) ...

  2. 三、python学习-常用模块

    一.常用模块 1.math数学模块 在计算机中,所有数值在计算机底层都是约等于机制,并不是精确地 import math #ceil() 向上取整操作 math.ceil(3.1)=>4 #fl ...

  3. js--原型和原型链相关问题

    前言 阅读本文前先来思考一个问题,我们在 js 中创建一个变量,我们并没有给这个变量添加一些方法,比如 toString() 方法,为什么我们可以直接使用这个方法呢?如以下代码,带着这样的问题,我们来 ...

  4. 一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

    这一周线上碰到一个诡异的BUG. 线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功. 通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三 ...

  5. Django中 render() 函数的使用方法

    render() 函数 在讲 render() 函数之前,我们在 Django 项目 index 文件夹的 urls.py 和 views.py 中编写如下功能代码:(不难,望读者细心阅之) # in ...

  6. 021- Java语言基础-基本数据类型的一些问题和总结

    我们输入以下代码: public class DataType07 { public static void main(String[]args){ byte b1 = 4; byte b2 = 5; ...

  7. php异常及错误信息捕获并记录日志实现方法全解析

    php异常处理 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法.异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码 ...

  8. 关于width的继承和获取

    absolute元素(如果没有设置width值),其宽度自适应于内部元素, <!DOCTYPE html> <html lang="en"> <hea ...

  9. CTB-Locker敲诈者病毒下载器分析

    一. 样本基本信息 样本名称:927354529512.scr 样本大小:110592 字节 病毒名称:Win32.Trojan.Ctb-locker.Auto 样本MD5值:3A6D7E551C13 ...

  10. Windows Server中企业证书服务的安装

    目录 企业证书服务的安装 证书服务的应用 企业证书服务的安装 企业证书服务是基于域的,所以需要该服务器是域控服务器. 添加角色,勾选 Active Directory 证书服务 然后后面的一直下一步, ...