gpt4 book ai didi

c++ - 类的多态性和封装

转载 作者:行者123 更新时间:2023-11-30 00:58:24 25 4
gpt4 key购买 nike

我正在尝试利用 c++ 中的多态性,但我来自 c 世界,我认为我所做的可以以 OOP 方式更巧妙地完成。

我有 2 个具有完全相同的公共(public)属性的类,我想“隐藏”存在 2 个不同的实现。这样我就可以拥有一个类,我可以在其中使用成员函数,就像我正在访问特定类一样。

下面是我想要完成的一个非常简单的实现:

#include <iostream>

class subber{
private:
int id;
public:
int doStuff(int a,int b) {return a-b;};
};


class adder{
private:
int id;
public:
int doStuff(int a, int b) {return a+b;};
};


class wrapper{
private:
int type_m;
adder cls1;
subber cls2;
public:
wrapper(int type) {type_m=type;};//constructor
int doStuff(int a, int b) {if(type_m==0) return cls1.doStuff(a,b); else return cls2.doStuff(a,b);};
};


int main(){
wrapper class1(0);
std::cout <<class1.doStuff(1,3) <<std::endl;
wrapper class2(1);
std::cout <<class2.doStuff(1,3) <<std::endl;
return 0;
}

我有 2 个名为“subber”和“adder”的类,它们都有一个名为 doStuff 的成员函数,它将减去或添加 2 个数字。

我将其封装在一个类“wrapper”中,它同时具有“adder”和“subber”作为私有(private)变量,以及一个 doStuff 公共(public)成员函数。给定我用哪个值实例化我的“包装器”类,我的“包装器”类将简单地将“doStuff”中继到正确的类。

这段代码确实有效,但我想避免在我的包装类中同时实例化“subber”和“adder”,因为我只需要在我的每个“包装”类中使用它们。

谢谢

最佳答案

有很多方法可以做到这一点。通过 Factory例如。

但为了保持简单 - 创建一个定义接口(interface)的基本抽象类,并从中派生类以实现功能。然后你只需要区分一次,当你创建类的时候,之后你不管,你只需要调用接口(interface)函数。

您的代码看起来像那样。

class DoStuffer
{
public:
virtual int doStuff(int, int)=0;
virtual ~DoStuffer(){}; // Because Tony insists:-) See the comments
}

class subber: public DoStuffer{
public:
virtual int doStuff(int a,int b) {return a-b;};
};


class adder: public DoStuffer{
public:
virtual int doStuff(int a, int b) {return a+b;};
};

int main(){
DoStuffer *class1 = new adder();
DoStuffer *class2 = new subber();
std::cout <<class1->doStuff(1,3) <<std::endl;
std::cout <<class2->doStuff(1,3) <<std::endl;
delete class1; // don't forget these:-)
delete class2;
return 0;
}

关于c++ - 类的多态性和封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260316/

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