• 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
  whoreman said:
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

    • AMD RX 9060 XT launches above MSRP and is available to buy now by Sayan Sen At Computex 2025 this year, AMD announced its RX 9060 XT mid-range desktop GPUs. The new graphics card landed in both 8GB and 16GB flavors and targets 1080p as well as light 1440p gaming. The community and some of the media criticized the 8GB VRAM model, but AMD defended the move explaining how the smaller memory buffer is not a cause of worry for the majority. Both the 8 GB and the 16 GB RX 9060 XT are now available for purchase. A new driver is out too with Adrenalin version 25.6.1. However, as always, day one stocks would likely be highly limited, similar to other GPUs or any other product, like the Nintendo Switch 2, that also landed today. Third-party AIB (add in board) vendors like Gigabyte, for example, are selling the 8GB at $329 (SEP is $299) currently on Amazon US, so expect some markup. The technical specifications of the Radeon RX 9060 XT are given below: Specification Value GPU Architecture AMD RDNA™ 4 Core Compute Units 32 Video Memory 16 GB / 8GB GDDR6 Infinity Cache 32 MB Core Boost Clock Up to 3.13 GHz Memory speed/bandwidth 20 Gbps / 320 GB/s AI Performance 821 TOPS (INT4 with sparsity) Raytracing & AI Accelerators 32 3rd Generation Raytracing Accelerators; 64 2nd Generation AI Accelerators PCIe Interface PCIe® 5.0 x16 Display Outputs DisplayPort™ 2.1a, HDMI® 2.1b Total Board Power (TBP) 160W* If you notice, we have an asterisk for the TBP value in the table above. That is because AMD says that it can vary between 150 and 182 watts. Performance-wise, we know the $349 16 GB variant is close to the Nvidia RTX 5060 Ti in rasterization but falls behind in ray tracing. Meanwhile, the 8GB model, priced the same as the GeForce RTX 5060 at $299, should be better, as both 8 Gig and 16 Gig SKUs are identical spec-wise outside of memory capacity. As an Amazon Associate we earn from qualifying purchases.
    • It actually looks decent, although trailers could make the worst nonsense look watchable sometimes. I'm not a fan of the "extended" Aliens universe (Prometheus, Covenant), but I liked Romulus so will definitely give this a shot.
    • I just don't think it's possible for a government to be 100% state-owned in its companies. Every government depends on private technologies to function. There are very smart technology teams at Google, Microsoft, Intel, AMD, Nvidia, IBM, Apple, Amazon. What the US government wants are these people working together.
    • I agree with keeping defense contractors local, but... The goal proposed here isn't to cut spending (though I think that is also a worthy goal), the goal is to ensure spending is being properly accounted for. I'm not sure why working with US based companies would make proper accounting more difficult than going international. I assume the point you are making is that after several rounds of audit failures and cuts, they would be forced to look for cheaper venders, but again, PASS THE F***ING AUDIT, then the cuts don't happen. Everyone was losing their minds when some of the Covid PPP money was misused, and yes, that was bad, but the DoD misplaces many times that amount of money every year, and no one seems to care. It is totally unacceptable for the 2nd biggest government expenditure to be an unaccountable black box.
    • I don't know man.. when I go incognito and I fill in an amount and click on Donate with Debit or credit card, it takes me to a page where I can choose the country and bank/credit card details to fill in. It does not require a PayPal account. No biggie either way.
  • Recent Achievements

    • Week One Done
      jbatch earned a badge
      Week One Done
    • First Post
      Yianis earned a badge
      First Post
    • Rookie
      GTRoberts went up a rank
      Rookie
    • First Post
      James courage Tabla earned a badge
      First Post
    • Reacting Well
      James courage Tabla earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      406
    2. 2
      +FloatingFatMan
      181
    3. 3
      snowy owl
      175
    4. 4
      ATLien_0
      170
    5. 5
      Xenon
      135
  • Tell a friend

    Love Neowin? Tell a friend!