c++ - 在 C++ 中,如何使同一类的两个对象具有独特的函数行为?

标签 c++ oop object overloading

是否可以通过在创建对象后重载函数来使类函数的行为完全不同?

例如,我有一个名为 Poop 的类,它有一个名为 start() 的函数。 我希望 start() 为每个 Poop 实例做完全不同的事情。

所以如果我调用 a.start() 它可能会运行一个 for 循环 10 次迭代 如果我调用 b.start() 它可能会做一些完全不同的事情,比如向用户询问两个 数并返回总和。

我的代码:

对象.cpp

#include <string>
#include <obj.h>

//Concstructor
Poop::Poop (std::string get_name) {
    my_name = get_name;
}

//Obj functions implement here
void Poop::set_name(std::string name) {
    my_name = name; 
}

// I want to change this so that each object can behave differently
// when they call .start()
void Poop::start() {
    std::cout << "I am poop_1's start call" << std::endl;
}


//Event objects
Poop poop_1("bob");

对象.h

#include <iostream>
#include <string>

// defin obj
class Poop {
    //class attrs; private
    private:
        std::string my_name;
    public: //class function
        Poop(std::string); //constructor
        std::string get_name() {return (my_name);}
        void set_name(std::string); //sets Obj name
        void start(); // for the custom event; need to change this somehow

};

// global event objects
extern Poop poop_1;

最佳答案

执行此类操作的一种常见方法是使用 the Strategy pattern . Poop 的每个实例都将包含对strategy 对象 的引用——一个扩展纯虚拟strategy 类的类的实例,然后它会将 start() 委托(delegate)给策略对象。

另一种方法是拥有一个实现脚本语言的库,并在脚本语言中实现各种行为;每个对象都可以包含不同的脚本,start() 可以执行它。

关于c++ - 在 C++ 中,如何使同一类的两个对象具有独特的函数行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005610/

相关文章:

java - 为什么我不能创建控制台类的对象?

java - gson.toJson() 抛出 StackOverflowError

c++ - 从 C++ (Windows) 转储堆栈跟踪 - 找不到符号

c++ - 比较两个宽字符串 Visual C++

c++ - 使用析构函数删除成员 vector 中的堆分配对象

c# - 从基类一般初始化派生类字段的可靠方法?

java - 初始化程序对静态字段的非法引用

java - java中栈元素与对象的比较

c++ - 类函数可以有不同类对象的参数吗?

c# - 将 C/C++ 宏转换为 C# 中的等效代码