只阻塞继承类中的一个函数

block only one function from inherited class

本文关键字:一个 函数 继承      更新时间:2023-10-16

我想创建一个只从父类中阻塞一个函数的类。例如:

class basememory{
    char *mem;
protected:
    basememory(int size){mem=new char[size];}
public:
    char read(int i){return mem[i];}
    void write(int i, char a){mem[i]=a;}
};
class rom: public basememory{
public:
    rom(int size, char *ch, int arr): basememory(size){
        for(int i=0;i<arr;i++){
            write(i, ch[i]);
        }
    } //burned to rom
};
class ram: public basememory{
public:
    ram(int size): basememory(size){}
};

我不希望write()函数可以从外部访问,只能用于rom类。有没有一种方法可以做到这一点,而不改变基内存类?

您可以使用protectedprivate继承,然后公布您想要公开的函数:

class rom: protected basememory
{
public:
    rom(int size, char *ch, int arr): basememory(size){ ..... }
    using basememory::read;
 // ^^^^^^^^^^^^^^^^^^^^^^
};

注意,这意味着你不能通过引用/指针将rom传递给期望basememory的函数——因为basememorywrite是公共的,所以如果有可能将rom转换为basememory引用,它将绕过rom的访问说明符。