gpt4 book ai didi

C++ 私有(private)和 protected 虚方法

转载 作者:可可西里 更新时间:2023-11-01 18:16:13 30 4
gpt4 key购买 nike

为了分离两个客户端的接口(interface),将虚拟方法设为私有(private)似乎是件好事 -1. 实例化对象并调用方法的客户端2. 派生自该类并可能想要覆盖该方法的客户。简单地说——第一个客户不需要知道一个方法是否是虚拟的。他将调用基类公共(public)非虚拟方法,该方法又将调用私有(private)虚拟方法。例如,请参见下面的代码。

现在,如果虚方法需要向其基类的相应虚方法发送 super 消息,例如 Save 方法 - 它必须通过继承链中的所有虚方法才能保存对应的数据每个派生级别 - 我们别无选择,只能使用 protected 虚拟方法 - 除非有一种方法可以保证在所有派生级别保存数据而不使用 super 消息传递(我不知道没有)。

我想知道以上推理是否正确。

确保使用滚动条查看完整代码。

#include <iostream>
using namespace std;

class A {

string data;

protected:

virtual void SaveData()= 0;

public:

A():data("Data of A"){}

void Save(){
cout << data << endl;
SaveData();
}
};

class B : public A {

string data;

protected:

virtual void SaveData() { cout << data << endl;}

public:

B():data("Data of B") {}

};

class C : public B {

string data;
protected:

virtual void SaveData() {
B::SaveData();
cout << data << endl;
}

public:

C():data("Data of C") {}
};


int main(int argc, const char * argv[])
{
C c;
c.Save();

return 0;
}

最佳答案

是的,如果您需要调用另一个类的 SaveData,它需要可以从该类访问 - 所以 publicprotected

关于C++ 私有(private)和 protected 虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670612/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com