• 0

[C++] How to Create Instance of another class?


Question

I am new to C++, and I am making a simple RPG game. I have an 'Item' class, which has properties and methods that all items will have. I need to be able to:

a) Inherit from this class to make a class with the item properties and methods, along with new ones

b) Make a new instance of this class in my main class. For example in vb.net:

Class MainClass

dim sword as new ItemClass

End Class

I have tried the following in C++:

new ItemClass sword;

However this gives me the error:

error C2061: syntax error : identifier 'ItemClass'

so it isn't recognising the other class? Thanks for any help :)

6 answers to this question

Recommended Posts

  • 0
it is more like

ItemClass *sword;

sword = new ItemClass();

Thanks, but I still get the same errors (plus errors saying 'sword' is an undeclared identifier)

The Item.h file is in the same projet, but do I need to reference it in any way at the start of my main class file? (and the code is meant to be in th .h rather than the .cpp file right?) Or when I created this file/ object, what type should I have chosen? (C++ class, or just C++ file?)

Also, for the sake of gaining a better understanding, what does the asterix * mean?

Thanks again

  • 0

To create a new instance of a class, you do this:

MyClass NewClassInstance;

If you want to create more than one, you can do this:

MyClass *NewClassInstances = new MyClass[500];

You can essentially treat classes as if they were ints or floats, similar syntax.

In your case, you have created a base item class. You said you wanted to inherit from it in order to create new items. I'm not sure if what you said is what you meant to do, but I'll show you a quick example of what that would be:

//This is your base item class
class Item {

int cost;
char[50] name;
int arbitraryValue;
// etc.

}

class HealingItem : public Item {

// Inherits from Item, can be used just like Item

}

Now when you do this, you can do something rather nifty.

Since all HealingItem's inherit from BaseItem, you can actually use them as such. Here's an example:

Item *MyItem = new HealingItem;

This may seem a bit odd, but in your game you may want to loop through all of the items and rather than having a separate loop for each item type, you can have all of them in one big Item array.

I hope that helps =)

EDIT: The * denotes a pointer. If you haven't looked at C++ pointers yet, I strongly recommend you go do this now as they are very very important.

  • 0

About creating instances, note that how you do it depends on if you want to create it on the stack or the heap.

If you create it on the heap, that would be the object* obj = new object(); syntax or object* obj = new object("123") if its constructor took some arguments. If it's rather on the stack (this is pretty common to do too), then it's instead simply object obj; or object obj("123"); if it had a constructor taking some arguments.

Things on the heap needs to be explicitly freed by you at a later point with delete obj;. Creating object instances on the heap is therefore useful if you want to at a later point (like in another function, or to set an object's state as a member variable) access the object, because the compiler won't automatically free it. Creating object instances on the stack make them automatically be freed at the exit of the function they were created in, or the class they were created in, in case of a member variable.

If you create it on the heap, you get a pointer reference to it, and can interact with the object either by typing obj->someFunction(); or by using the "*" dereferencing operator for something like (*obj).someFunction;.

Note that "*" can mean both "this type is a pointer" and "dereference this pointer" depending on how it's used. obj* pointer; is a declaration of a pointer named "pointer", and int i = *pointerToInt; is dereferencing the pointer "pointerToInt" to retrieve the int value it points to and store it in the variable "i".

This "duality" detail puzzled me with C++ for way too long. :p The "->" operator was invented as "syntactic sugar" in C++ so you won't have to do like the ugly above with (*obj).someFunction and it's rarely used like that.

If you create it on the stack, you however don't have a pointer to the object, but can interact with it directly. So then you would instead type obj.someFunction();

Allocating things on the stack is typically faster than allocating on the heap, so it's recommended to do that instead of creating stuff on the heap if you only need to use the variable in a function anyway.

Edited by Jugalator
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • The quantum search for Time's origin had an equally mind-boggling conclusion by Sayan Sen Image by Steve Johnson via Pexels A theoretical study from researchers at the University of Surrey suggested that the direction of time may not be fundamentally fixed in certain quantum systems. The work, published in Scientific Reports, examined how the “arrow of time” could emerge from microscopic physics and found that time-reversal symmetry can remain intact even in models used to describe processes such as energy loss and thermalisation. The arrow of time refers to the observed one-way direction from past to future in everyday life. In macroscopic processes, this is easy to see. Spilled milk spreads across a table and does not gather back into a glass, and heat flows from hotter objects to colder ones. These processes shape the common sense idea that time moves in a single direction. However, at the level of fundamental physics, many equations do not prefer a direction of time. Time-reversal symmetry means that the same physical laws can describe a system whether time moves forward or backward. This has made it difficult to explain why irreversible behaviour appears in the large-scale world even when the underlying rules do not require it. Dr Andrea Rocco, Associate Professor in Physics and Mathematical Biology at the University of Surrey, described this contrast: "One way to explain this is when you look at a process like spilt milk spreading across a table, it's clear that time is moving forward. But if you were to play that in reverse, like a movie, you'd immediately know something was wrong – it would be hard to believe milk could just gather back into a glass. However, there are processes, such as the motion of a pendulum, that look just as believable in reverse. The puzzle is that, at the most fundamental level, the laws of physics resemble the pendulum; they do not account for irreversible processes. Our findings suggest that while our common experience tells us that time only moves one way, we are just unaware that the opposite direction would have been equally possible." The study focused on open quantum systems, which are quantum systems that interact with a surrounding environment. This environment, often described as a heat bath, can exchange energy and information with the system. The researchers used this framework to study how a direction of time might appear even when the underlying physics does not enforce one. A key part of the analysis involved the Markov approximation. This is a simplification used in many models where the system is assumed not to retain memory of its past states. The idea is that changes depend only on the current state, not on earlier history. This is commonly used when studying thermalisation, which is the process where a system settles into equilibrium with its environment. The study also used concepts such as master equations, including the Lindblad and Pauli equations, which describe how probabilities of different quantum states change over time. Another related model discussed was quantum Brownian motion, which describes the random-like movement of a quantum particle interacting continuously with its environment. In these descriptions, a “memory kernel” can appear, which is a mathematical term that accounts for how past states influence current behaviour. The researchers found that applying the Markov approximation did not break time-reversal symmetry. Even when the system interacted with an effectively infinite heat bath, the resulting equations of motion remained symmetric in time. This meant that the same mathematical description could, in principle, run forward or backward in time without contradiction. The study further showed that standard frameworks used in open quantum systems, including quantum Brownian motion and master equations like the Lindblad and Pauli forms, could be written in a time-symmetric way. These equations are typically used to describe processes that look irreversible, such as dissipation and thermalisation, but the results suggested they can also be interpreted as allowing evolution in both time directions. Thomas Guff, Research Fellow in Quantum Thermodynamics, said: "The surprising part of this project was that even after making the standard simplifying assumption to our equations describing open quantum systems, the equations still behaved the same way whether the system was moving forwards or backwards in time. When we carefully worked through the maths, we found that this behaviour had to be the case because a key part of the equation, the "memory kernel," is symmetrical in time. We also found a small but important detail which is usually overlooked – a time discontinuous factor emerged that kept the time-symmetry property intact. It’s unusual to see such a mathematical mechanism in a physics equation because it's not continuous, and it was very surprising to see it appear so naturally." The researchers also noted that deriving a one-way arrow of time from time-reversal symmetric microscopic dynamics remains an open problem across fields such as thermodynamics, statistical mechanics, particle physics, and cosmology. Their results suggested that some standard descriptions of irreversible behaviour in open quantum systems may be better understood using a time-symmetric formulation of Markovianity. According to the study, processes such as thermalisation, which are usually treated as irreversible, could in theory be described in a way that allows evolution in either time direction under the same rules. This does not imply that time reversal occurs in everyday life, but rather that the underlying equations do not strictly enforce a single direction. Overall, the findings suggested that the perceived direction of time may emerge from how physical systems are modelled and approximated, rather than from a fundamental asymmetry in the laws themselves. The researchers noted that this perspective could have implications for ongoing work in quantum mechanics, thermodynamics, and cosmology on the origin of time’s arrow. Source: University of Surrey, Nature This article was generated with some help from AI and reviewed by an editor. Under Section 107 of the Copyright Act 1976, this material is used for the purpose of news reporting. Fair use is a use permitted by copyright statute that might otherwise be infringing
    • A bit premature... 100% Marketing. Bizarre.
    • A $300 price hike is insane! No one is going to want to pay that much!
    • Since the 1st one flopped, there is really no reason to make another one. It's just losing money left and right.
  • Recent Achievements

    • Reacting Well
      BizSAR earned a badge
      Reacting Well
    • First Post
      AndreaB earned a badge
      First Post
    • Week One Done
      Huge Trailer earned a badge
      Week One Done
    • Week One Done
      Classifyskilleducation earned a badge
      Week One Done
    • One Month Later
      eurospharma62 earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      579
    2. 2
      +Edouard
      182
    3. 3
      PsYcHoKiLLa
      74
    4. 4
      Michael Scrip
      71
    5. 5
      neufuse
      64
  • Tell a friend

    Love Neowin? Tell a friend!