C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨
原文: http://blog.csdn.net/zgjxwl/article/details/4804233
1.public继承方式下
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
void eat()
{
cout << "eat\n";
}
protected:
void play()
{
cout << "play\n";
}
private:
void drink()
{
cout << "drink\n";
}
};
class Giraffe: public Animal
{
public:
Giraffe(){}
void StrechNeck()
{
cout << "Strech neck \n";
}
void take()
{
eat(); // ok,公有继承下,基类的公有成员对派生类可见
// drink(); // error,公有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员
play(); // ok,公有继承下,基类的保护成员对派生类可见
}
};
int main()
{
Giraffe gir;
// 以下三条语句说明基类成员对派生类对象的可见性
gir.eat(); // ok,公有继承下,基类的公有成员对派生类对象可见
// gir.play(); // error,公有继承下,基类的保护成员对派生类对象不可见
// gir.drink(); // error,公有继承下,基类的私有成员对派生类对象不可见
// 下面一条语句说明基类成员对派生类的可见性
// 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关)
gir.take();
gir.StrechNeck();
return 0;
}
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
void eat()
{
cout << "eat\n";
}
protected:
void play()
{
cout << "play\n";
}
private:
void drink()
{
cout << "drink\n";
}
};
class Giraffe: public Animal
{
public:
Giraffe(){}
void StrechNeck()
{
cout << "Strech neck \n";
}
void take()
{
eat(); // ok,公有继承下,基类的公有成员对派生类可见
// drink(); // error,公有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员
play(); // ok,公有继承下,基类的保护成员对派生类可见
}
};
int main()
{
Giraffe gir;
// 以下三条语句说明基类成员对派生类对象的可见性
gir.eat(); // ok,公有继承下,基类的公有成员对派生类对象可见
// gir.play(); // error,公有继承下,基类的保护成员对派生类对象不可见
// gir.drink(); // error,公有继承下,基类的私有成员对派生类对象不可见
// 下面一条语句说明基类成员对派生类的可见性
// 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关)
gir.take();
gir.StrechNeck();
return 0;
}
2.private继承方式下
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
void eat()
{
cout << "eat\n";
}
protected:
void play()
{
cout << "play\n";
}
private:
void drink()
{
cout << "drink\n";
}
};
class Giraffe: private Animal
{
public:
Giraffe(){}
void StrechNeck()
{
cout << "Strech neck \n";
}
void take()
{
eat(); // ok,私有继承下,基类的公有成员对派生类可见
// drink(); // error,私有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员
play(); // ok,私有继承下,基类的保护成员对派生类可见
}
};
int main()
{
Giraffe gir;
// 以下三条语句说明基类成员对派生类对象的可见性
// gir.eat(); // error,私有继承下,基类的公有成员对派生类对象不可见
// gir.play(); // error,私有继承下,基类的保护成员对派生类对象不可见
// gir.drink(); // error,私有继承下,基类的私有成员对派生类对象不可见
// 下面一条语句说明基类成员对派生类的可见性
// 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关)
gir.take();
gir.StrechNeck();
return 0;
}
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
void eat()
{
cout << "eat\n";
}
protected:
void play()
{
cout << "play\n";
}
private:
void drink()
{
cout << "drink\n";
}
};
class Giraffe: private Animal
{
public:
Giraffe(){}
void StrechNeck()
{
cout << "Strech neck \n";
}
void take()
{
eat(); // ok,私有继承下,基类的公有成员对派生类可见
// drink(); // error,私有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员
play(); // ok,私有继承下,基类的保护成员对派生类可见
}
};
int main()
{
Giraffe gir;
// 以下三条语句说明基类成员对派生类对象的可见性
// gir.eat(); // error,私有继承下,基类的公有成员对派生类对象不可见
// gir.play(); // error,私有继承下,基类的保护成员对派生类对象不可见
// gir.drink(); // error,私有继承下,基类的私有成员对派生类对象不可见
// 下面一条语句说明基类成员对派生类的可见性
// 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关)
gir.take();
gir.StrechNeck();
return 0;
}
3.protected继承方式下
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
void eat()
{
cout << "eat\n";
}
protected:
void play()
{
cout << "play\n";
}
private:
void drink()
{
cout << "drink\n";
}
};
class Giraffe: protected Animal
{
public:
Giraffe(){}
void StrechNeck()
{
cout << "Strech neck \n";
}
void take()
{
eat(); // ok,保护继承下,基类的公有成员对派生类可见
// drink(); // error,保护继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员
play(); // ok,保护继承下,基类的保护成员对派生类可见
}
};
int main()
{
Giraffe gir;
// 以下三条语句说明基类成员对派生类对象的可见性
// gir.eat(); // error,保护继承下,基类的公有成员对派生类对象不可见
// gir.play(); // error,保护继承下,基类的保护成员对派生类对象不可见
// gir.drink(); // error,保护继承下,基类的私有成员对派生类对象不可见
// 下面一条语句说明基类成员对派生类的可见性
// 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关)
gir.take();
gir.StrechNeck();
return 0;
}
C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨相关推荐
- 类的继承(三种继承方式)
我只是挑着我不太会的地方整理,可能比较基础. 类的继承主要分为三类,公有继承,私有继承,保护继承. 然后主要记录一下不同的继承方法对派生类的不同作用. 1,派生类私有继承于基类. 这个时候,派生类继承 ...
- protect 继承_c++三种继承方式public,protect,private
三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 p ...
- PHP Class中public,private,protected,static的区别
PHP Class中public,private,protected,static的区别 public:权限是最大的,可以内部调用,实例调用,可以被继承. protected:受保护类型,用于本类和继 ...
- php class中public,private,protected的区别以及实例分析
本篇文章是对php class中public,private,protected的区别以及实例进行了详细的分析介绍,需要的朋友参考下 一,public,private,protected的区别 pub ...
- C++继承机制(一)——基本语法、三种继承方式、继承哪些数据
目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...
- protect 继承_C++三种继承方式
C++继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 ...
- C++的三种继承方式详解
文章目录 @[toc] C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 ...
- C++ 三种继承方式
C++继承的一般语法为: class 派生类名:[继承方式] 基类名{派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 p ...
- Java中List集合的三种遍历方式(全网最详)
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
最新文章
- Go 分布式学习利器(12)-- Go语言的扩展和复用
- LeetCode 2 两数相加
- 10个强大的Javascript表单验证插件推荐
- 20155338 《网络攻防》 Exp7 网络欺诈防范
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第10章-基于模型预测控制的人机协同控制
- JVM:类加载机制之类加载器
- java制作图形界面数据库_java图形界面以及链接数据库
- 不错的向上滚动广告代码
- 华为服务器报错信息,厂商 push 不通排查指南
- JAVA中易出错的小问题(二)
- python绘制缓和曲线_CAD中如何绘制缓和曲线
- 导出java applet_Java Applet基础——输出HelloWorld
- 国产统信UOS使用FTP跨网段访问桌面云神州网信版windows的共享文件
- jquery mobile mobiscroll 日期插件使 用mobiscroll
- POJ 1417 True Liars (种类并查集+DP)
- ELK+Filebeat 部署安装
- PAT_(STL使用)map-1100 Mars Numbers (20分)-1054 The Dominant Color (20分)-1071-1022
- 命运2服务器维护2021,命运2 2021年3月17日更新内容详解 冰影系列削弱一览[多图]...
- 《带你学C带你飞》—— SE44传递结构体变量和结构体指针
- iOS常用第三方框架