CPP/类/成员函数访问权限2
// main.cpp
// OOL
// Created by mac on 2019/4/4.
// Copyright © 2019年 mac. All rights reserved.
// 1.在一个类中如果直接把成员函数权限声明成protected或者是private是无法直接被生成的本类对象访问的.
// 2.如果想要访问被protected或者private保护的函数,那么可以在本类的public修饰符下生成新函数,调用那两种函数就可以了。
// 3.BaseClass称为基类或者超类 Derived1成为子类或派生类
// 4.类class的前面是否需要添加访问修饰符,对类本身,对类生成的对象,对继承类,对成员函数,对成员变量都有什么影响
// 5.从基类中的protected权限下继承的g()函数,可以在子类中在public权限下进行g()重写。
// 6.从基类中private权限下继承的h()函数,可以在子类中的public权限下进行h()函数的重写。
// 7.在生成继承类的时候 public virtual 继承是什么意思?
// 8.在生成继承类的时候,子类的public修饰符下的成员函数可以调用基类的protected修饰符下的函数,但是无法调用继承来的privated修饰符下的函数
// 9.在生成派生类的时候 如果是以protected的形式来进行继承的话,那么基类的所有公有、受保护成员在派生类中都会变成受保护的成员。
// 10.对于私有形式的继承,基类的公有成员和受保护的成员在派生类中都变成了私有成员。
// 11.在所有的继承类型中,基类的私有成员都不能在派生类中访问。
// 12.基类的受保护成员只能在派生类中访问,而不能在非派生类中进行访问。这个非派生类除了指类这种东西本身外,还指其他的东西。我觉得这样说还不是很完整,因为基类的受保护成员,在基类定义的内部也是可以被调用的。而非单指的是派生类。
// 13.类的前面添加virtual是为了继承类防止冗余的现象。但是具体的用法还是不清楚。
#include <iostream>
using namespace std;
class BaseClass{
public:
BaseClass(){ }
void f(){
cout<<"f()in BaseClass"<<endl;
}
//1.在基类中重新定义函数进行调用,从而打破访问修饰符的限制。
//2.或者在子类中的public修饰符下重写这个函数。
void c(){
g();
h();
}
protected:
void g(){
cout<<"g()in BaseClass"<<endl;
}
private:
void h(){
cout<<"h()in BaseClass"<<endl;
}
};
//继承基类
class Derived1 : public virtual BaseClass{
public:
//在继承类中重写f()函数
void f(){
g();
//h();
}
protected:
private:
};
int main(int argc, const char * argv[]) {
BaseClass bc;
bc.c();
Derived1 d1;
//d1.g();
//d1.h();
d1.f();//输出的是继承类的f()函数
d1.BaseClass::f();//输出的基类的f()函数
return 0;
}
Tips
- 类class的构造函数的前面必须添加public,要不没法生成对象。不加public,默认就是private。
- 注意结构体struct的构造函数前面不加public,也能正常生成对象。
- 每个对象都可以通过指针this来访问自己的地址,所以*this就是指的对象本身。
- 在写析构函数的时候注意区分~的英文或者中文状态,否则编译无法通过。
CPP/类/成员函数访问权限2的更多相关文章
- CPP/类/成员函数访问权限
- c++学习——类成员的访问权限
成员的访问权限 Public: 任何人,尤其是那些要使用这个类库的客户程序员,都能访问那个紧跟在public 后面声明的成员. 默认的package: 在同一个目录里面的文件,并且都没有明确指明它是属 ...
- Java类和类成员的访问权限修饰符
一:访问修饰符: 1.省略访问修饰符 具有默认的访问特性,即具有包访问特性,只能被同一个包中的类使用. 2.public访问修饰符 用于说明类和类的成员的访问权限.这种类叫公有类.在一个文件中只能有一 ...
- java类成员的访问权限
private:这是安全级别最高的访问权限,尽在该类中可以访问到: 默认访问权限:又称包访问权限,顾名思义,仅在该包内可以访问: protected:在包访问权限的基础上,该类的子类也可以访问到: p ...
- 02-25 类成员的访问权限--internal
C#中还有一种可访问性,就是由关键字internal所确定的“内部”访问性: internal有点像public,外界类也可以直接访问声明为internal的类或类的成员,但这只局限于同一个程序集内部 ...
- Java成员的访问权限控制
Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
- C++ 类 & 对象-类成员函数-类访问修饰符-C++ 友元函数-构造函数 & 析构函数-C++ 拷贝构造函数
C++ 类成员函数 成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义. 需要强调一点,在 :: 运算符之前必须使用类名.调用成员函数是在对象上使用点运算符(.),这样它就能操作与 ...
- VS2015 导航栏 查看每个cpp文件中类以及类成员函数的框框
这个可以查看每个cpp文件中类以及类成员函数的框框叫导航栏! 怎么打开导航栏可以再百度.
- C++继承后的函数访问权限
今天在写代码时发现对继承后的函数访问权限不太清楚,于是自己做了个测试: 1.头文件(test.h) 1 #include <iostream> 2 using namespace std ...
随机推荐
- Java 中父类怎么调用子类的方法?
父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...
- Java并发编程指南
多线程是实现并发机制的一种有效手段.在 Java 中实现多线程有两种手段,一种是继承 Thread 类,另一种就是实现 Runnable/Callable 接口. java.util.concurre ...
- Date()对象的设置与解析
怎么获取当前时间? 怎么给Date对象设置特定时间? 将Date对象解析为毫秒数? 将Date对象解析为日月年?获取小时/分钟/秒? 直接new Date()新建对象,可以获取当前时间的Date对象: ...
- 如何计算tomcat线程池大小?
背景 在我们的日常开发中都涉及到使用tomcat做为服务器,但是我们该设置多大的线程池呢?以及根据什么原则来设计这个线程池呢? 接下来,我将介绍本人是怎么设计以及计算的. 目标 确定tomcat服务器 ...
- save与Update的合并操作 标签: 关系映射 2017-07-13 15:11 7人阅读 评论(0) 收藏
做save与update的方法合并操作时,判断条件是主体对象的ID是否存在. 但是当页面中,涉及到多个主体对象的关联对象时,情况变得复杂起来,特总结项目中的几点 一.页面中的VO对象属性可以分为三类: ...
- Oracle EBS 查看请求执行情况
SELECT s.* FROM fnd_concurrent_requests r, v$session v, v$sql s WHERE r.oracle_session_id = v.audsid ...
- 1.windows下Redis安装
参考文档:https://www.cnblogs.com/Leo_wl/p/6392196.html?utm_source=itdadao&utm_medium=referral Redis数 ...
- MFC连接postgre数据库
配置环境: include:libpq-fe.h文件 lib:libpq.lib文件 dll:libeay32.dll,libiconv-2.dll,libintl-8.dll,libpq.dll,s ...
- VMware下 CentOS 连接外网问题(笔记)
虚拟机连接外网有三种模式.桥接.Nat.Host-Only.三者的区别,详见 实例讲解虚拟机3种网络模式(桥接.nat.Host-only) 使用虚拟机连接外网时,一定要充分考虑本地的网络环境!!! ...
- Spring 入门(概述)
1.什么是框架 2.Spring简介 3.IOC(配置.注解) 4.Bean(配置.注解) 5.AOP(配置.注解.AspectJ.API) 资源: http://spring.io/ http:// ...