设为首页 加入收藏

TOP

CPP/类/成员函数访问权限2
2019-04-04 20:08:47 】 浏览:24
Tags:CPP/ 成员 函数 访问 权限
//  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;
}

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇指针变量图解 下一篇sizeof 用于返回一个对象或者类型..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }