是否可以通过在创建对象后重载函数来使类函数的行为完全不同?
例如,我有一个名为 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/