Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1046757
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T16:11:47+00:00 2026-05-16T16:11:47+00:00

I have two classes that are almost identical, besides one method. The classes have

  • 0

I have two classes that are almost identical, besides one method. The classes have the same data part and all the member functions but one:

class A {
private:
  double data;
public:
  double calc(){
     return data*data;
  }
   double especific(){
     return 2.0*data;
  }
 }

and the second class is identical, besides the especific method.

This member function in particular needs all the member data to calculate, so passing by value or reference is not an option. Is there a way to implement this without a lot of code duplication? Either using only one class or using templates, but not inheritance (huge performance impact).

Thanks

EDIT: Thanks for all the responses. The Strategy pattern can help in my case, I will try it and see if it works. I’m avoiding virtual inheritance as the plague based on some tests that I did in a different program. This routine will be called everywhere, and performance is a very important factor.

  • 1 1 Answer
  • 2 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T16:11:47+00:00Added an answer on May 16, 2026 at 4:11 pm

    This sounds like a job for the Strategy pattern. It can be implemented in this case as a template parameter. Often it would be implemented as a constructor parameter or a setter method on the class, but that would require inheritance to work properly.

    In this case, something like:

    template <class SpecificStrategy>
    class A {
     private:
        double data;
     public:
        double calc(){
           return data*data;
        }
        double especific() {
           return SpecificStrategy::especific(data);
        }
    };
    
    class DoubleStrategy {
       static double especific(double data) {
          return 2 * data;
       }
    };
    class TripleStrategy {
       static double especific(double data) {
          return 3 * data;
       }
    };
    

    Then you can refer to:

    A<DoubleStrategy> x;
    A<TripleStrategy> y;
    

    x and y will be of completely unrelated types, but it sounds like that’s not what you want in this case.

    Now, in my opinion using a virtual function and inheritance is the way to go. As someone else pointed out, the performance penalty isn’t that large. However there are circumstances in which I could see that it would be a bad idea.

    For example, if this class is intended to represent a vector in a graphics package and you’re going to be doing the same transform to millions of them, then I could see how you would not want a virtual function call to be a part of the code that did the transform. In fact, you would want to avoid pointer dereferences of any kind of you could at all help it.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have two almost identical classes, in fact every member function is identical, every
I have two classes that work seperate from another, but they extend the same
I have two classes that perform date date range data fetching for particular days.
I have two classes that refer to each other, but obviously the compiler complains.
I have two classes that I would like to merge into a composite. These
I have two classes that I am testing (let's call them ClassA and ClassB).
I have two classes that represent two different database entities. Their relationship is 1:m
If I have two classes that both implement an interface, but also inherit, do
Suppose I have two classes that both contain a static variable, XmlTag. The second
If I have a class called A and I have two classes that derive

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.