• 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

    • Yeah!!!! I was damn well shocked to see the tab with previous file open when I clicked on the new file. It had private info and I was opening another file to show another person. That was weird
    • The article says the whole setup is about the size of a pencil case which sounds pretty portable to me.
    • I thought router has to have 6 Ghz band to be called wifi-7, guess I was wrong...
    • I have the Pixel 9 Pro XL...Unless this thing is "leaps and bounds" faster than the 9, I'll pass. And by leaps and bounds, I don't mean on benchmarks. "Real world" faster. Most people don't even come close to topping out the performance of their phones. Tensor G5 is Google's most powerful chip to date, boasting a staggering 36 percent performance leap over G4.
    • MIT's stunning 'bubble wrap' device squeezes water out from thin air even in deserts by Sayan Sen Image by Matteo Roman via Pexels Massachusetts Institute of Technology (MIT) engineers have built a new kind of device that can pull clean drinking water straight out of the air—no electricity needed. It’s designed for areas where water is scarce and traditional sources like rivers or lakes aren’t reliable. Right now, more than 2.2 billion people globally don’t have access to safe drinking water. In the United States alone, 46 million face water insecurity, with either no running water or water that’s not safe to drink. This new device, called an Atmospheric Water Harvesting Window (AWHW), uses a unique hydrogel panel that looks like black bubble wrap. These dome-shaped bubbles soak up water vapor from the air, especially at night when humidity is higher. During the day, sunlight makes the vapor inside evaporate. That vapor then condenses on a glass surface and drips down through a tube, turning into drinkable water. The AWHW doesn’t rely on power sources like batteries or solar panels. It’s completely passive, meaning it works on its own. The team tested a meter-sized panel in Death Valley, California, one of the driest places in North America, and got between 57.0 and 161.5 milliliters of water per day even with humidity as low as 21 percent. That’s more than what other similar passive devices have managed. “We have built a meter-scale device that we hope to deploy in resource-limited regions, where even a solar cell is not very accessible,” said Xuanhe Zhao, a professor at MIT. “It’s a test of feasibility in scaling up this water harvesting technology. Now people can build it even larger, or make it into parallel panels, to supply drinking water to people and achieve real impact.” Another cool part of the design is how they kept the water safe to drink. Usually, these kinds of hydrogels use salts like lithium chloride to absorb more vapor but that can lead to salt leaking into the water, which isn’t ideal. To solve this, MIT’s team mixed in glycerol, a compound that helps keep salt locked inside the gel. In testing, the lithium ion concentration in the harvested water stayed below 0.06 ppm (parts per million), which is way below the safe limit. The hydrogel domes also give the material more surface area, letting it collect more vapor. The outer glass panel is coated with a special polymer film that helps cool the glass, making it easier for vapor to condense. “This is just a proof-of-concept design, and there are a lot of things we can optimize,” said lead author Chang Liu, now a professor at the National University of Singapore. “For instance, we could have a multipanel design. And we’re working on a next generation of the material to further improve its intrinsic properties.” Published in Nature Water, the study says the AWHW could last at least a year and shows promise for making safe, sustainable water in places with harsh climates. The researchers believe an array of vertical panels could one day supply water to individual households, especially in remote or off-grid locations. Source: MIT News, 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.
  • Recent Achievements

    • One Month Later
      Ricky Chan earned a badge
      One Month Later
    • First Post
      leoniDAM earned a badge
      First Post
    • Reacting Well
      Ian_ earned a badge
      Reacting Well
    • One Month Later
      Ian_ earned a badge
      One Month Later
    • Dedicated
      MacDaddyAz earned a badge
      Dedicated
  • Popular Contributors

    1. 1
      +primortal
      506
    2. 2
      ATLien_0
      209
    3. 3
      Michael Scrip
      204
    4. 4
      Xenon
      143
    5. 5
      +FloatingFatMan
      121
  • Tell a friend

    Love Neowin? Tell a friend!