C++ :: Using Reference With Virtual Method
Mar 19, 2013
#include <iostream>
using namespace std;
struct A {
virtual void f() { cout<<"A
"; }
};
[code]...
I would expect that both examples 2 & 3 will give me the same result.I tried to figure it out but I could not. Both are references of a base class type, that get a derived object.
Q1 : why is the difference between them ?
As I see it, its kind of a mix between pointer - which in case of virtual method that was override in derived class - would give me the derived method (e.g. "B") and between regular object - which in case of virtual method that was override - would give me the specific method (Still "B"). So, example 2 "use" it as a regular object and example 3, "use" it as pointer.
Q2 : How should I refer to it ? I am using VS2008.
View 12 Replies
ADVERTISEMENT
Jan 17, 2013
I've been trying for more than one month to access a method found in a library called libcocosnas_static.a. I'm using Cocos2d-X version 2.0.4. The library has been used many times by my company to make games using cocos2d-1.0.1-x-0.12.0 without any problem.
This is what I've done:
1- I added the include paths of the library to both eclipse and Android.mk
2- Included the .h file using #include "NASPlatformUtil.h"
3- Added the libcocosnas_static.a file to the proj.androidobjlocalarmeabi folder
4- Added "LOCAL_WHOLE_STATIC_LIBRARIES += cocosnas_static" to the Android.mk file
5- Called the function using: NASPlatformUtil:: openUrl("http://xxx.xxx.com/");
I can right click on the function, click Open Declaration and get it without any problem, but the compiler keeps on giving me that dreaded error...
View 3 Replies
View Related
Mar 11, 2014
A quick clarification on virtual methods after reading Jumping int C++ by Alex Allain. If a user wanted to extend a class from someone elses library and override its methods that do not contain virtual methods; how would one call the overridden class if it is referred to by its super type
in other words how would someone override a method from someone elses library that does not have virtual keywords.
ie
something.h
Code:
#include <iostream>
namespace game{
class character{
public:
std::string getName(){return "character";}
};
}
main.cpp
Code:
#include <iostream>
#include <vector>
#include "something.h"
using std::vector
class protagonist : game::character{
public:
virtual std::string getName(){return "protagonist";} };
[Code]...
View 5 Replies
View Related
Oct 7, 2013
Im trying to create a map container with the key being an ID number and the value being a pointer to a class object. Currently Im creating objects and storing their address in the container. I am getting a runtime error when calling the virtual method with this pointer. I believe that the problem is being called because they aren't being called pointer/reference. let me know if you need more.
if(command == 'F'){
inputDataFile>>name>>mNumber>>email>>department>>tenure;
faculty newFaculty(name,mNumber,email,department,tenure);
person* facultyAdd = &newFaculty;
cout<<"Note: Adding "<<mNumber<<"..."<<endl<<"Adding ";
people.insert(pair<string,person*>(mNumber,facultyAdd));
[Code]...
View 3 Replies
View Related
Dec 27, 2012
class Parent{
public:
virtual int width();
virtual int height();
int area(){return width()*height();};
[Code] ....
View 10 Replies
View Related
Feb 2, 2015
I have a question similar to the one here: [URL] .....
The main difference is I would like to pass a method of derived class as a parameter to some other method in its template base class.
template <typename BaseType>
class Base {
public:
typedef void (Base::*Callback)(int A);
[Code] .....
The above is an example which does not compile. My compiler complains that the two BaseMethod() calls in DerivedMethod() are invalid uses of non-static member function.
Is this not possible to do, or is my syntax simply wrong? All I want is to be able to pass as an an argument to a method in the base class from the derived class some callback as a variable for the base class to invoke later.
View 2 Replies
View Related
Jan 6, 2014
I have questions about multiple inheritance and virtual methods. I have a class called solid. All objects of this class have hitboxes and can collide with others. I have the following methods:
void testCollision(something begin, something end);
/* This method takes a container's begin and end iterators to test if the object collides with any other object of the list of all the solids currently in the game area. Each time there is a collision, it calls collide(other) and other.collide(*this) */
virtual bool collide(solid& other);
/* This method always returns false and does nothing */
This class will be inherited by another class which will have overloads for a few specific collisions. For example:
class player : public solid{
public:
bool collide(projectile& other);
bool collide(enemy& other);
bool collide(wall& other);
};
My question is quite simple actually. If I have a loop which calls testCollision() with all elements in the list of all solids (a list of pointers to solids to be exact) and there is a collision between the player and a projectile, will testCollision call player::colide(projectile& other) or will it call solid::collide(solid& other). And in any case, did I understand how to use the virtual keyword? If I'm right, it should call the player::colide method if it's there for the specific type, else it will call the solid::colide which only returns 0, ignoring collision.
View 4 Replies
View Related
Jan 6, 2014
have a look at the following code :
class Base
{
public:
virtual ~Base()
{
cout << "Calling ~Base()" << endl;
[Code]...
Now this program produces the following result:
Calling ~Derived()
Calling ~Base()
i was reading online and got stuck here. i am unable to understand why 'calling ~Base()' is been printed here? when we reached delete pbase; in int main() it goes to Base class first and finds that its destructor is virtual so it goes to Derive class and finds another destructor and executes it but why does it prints ~Base() in any case?
View 4 Replies
View Related
Feb 19, 2014
How to put virtual keyword in the function of the base class. Will the function still be over-written properly? What will happen if I
(1) call function from base class pointer
(2) call function from derived class pointer
(3) call function from derived class object
If the virtual keyword is present, the over-written version will be called in all cases, am I mistaken?
View 1 Replies
View Related
Sep 25, 2013
have a look-
class Base
{
private:
{
[Code].....
my question is why we can't directly call the member function of the desired class instead of using virtual function.
***********same program using virtual keyword*******************
class Base
{
private:
{
[Code].....
Why we generally prefer the 2nd one i.e with virtual keyword. why we can't directly call the member function of the desired class instead of using virtual function...make me understand this point..
View 5 Replies
View Related
Jan 31, 2014
I was reading about the CRTP, and I can't for the life of me understand it's advantages over virtual functions.
Unless you're coding embedded systems, and can't afford the few extra bytes for the vptr, or coding something requiring high-performance, where every nanosecond counts, I just don't see why the CRTP is so attractive. It just adds more text and forces every user class that wants to use the CRTP'd hierarchy to become a template class.
I tried implementing my Functor hierarchy with the CRTP instead of virtual functions...All it did was clutter my files with angle brackets and made the whole thing look very ugly.
View 14 Replies
View Related
Jul 17, 2013
Here is the code,
Code:
class A {
public:
virtual void foo(){}
};
class B : public A {
[Code] ....
Obviously when you call pA->foo, it will call foo defined in B. But foo defined in B is private. It is not supposed to be called outside the class B. So it looks like virtual breaks encapsulation.
View 8 Replies
View Related
May 2, 2014
if we do a virtual functions(polymorphism) why we need re-declare the functions(when we create a new class derived from other)?
View 10 Replies
View Related
Dec 29, 2014
I'm just playing around with C++ and I'm trying to make a sort of virtual pet game. I know its not the best looking code but I'm trying. But as of right now I'm trying to be able to animate the game a little . For example , if a user decides to "pet" their "pet" I want the pets mouth to open from '_' to ^o^ like this:
() ()
('_') -> () ()
(^o^) and switch back and forth.
Here's my code:
#include <iostream>
#include <cstring>
using namespace std;
void Greeting()
[code]....
View 5 Replies
View Related
Oct 14, 2013
I try the functions pointers too, but without success. I understand the objects are the way for work with class's. until here fine. But why i can't change the virtual functions from an object? is there anyway for do it? Ican't do, outside of classfunctions, these code:
#include <iostream>
using namespace std;
class test {
public:
virtual void created(){};
[Code] ....
How i can validate these line:
void a::created()
???
View 2 Replies
View Related
Feb 17, 2013
I have this header file called Shape.h containing these function declarations. and a Shape.cpp which contains the body of the function. I am not showing it since it is not needed.
//This is from Shapes.h header file
#ifndef SHAPES_H
#define SHAPES_H
#include <iostream>
[Code]....
I have this unfinished Main.cpp because the third line "JuanSanchez::Circle *pCar = new Circle; " is giving me a compiler error "error C2061: syntax error : identifier 'Circle' "
#include "Shapes.h"
int main()
{
const int arrayIndex = 4;
JuanSanchez::Shape *myShape[arrayIndex];
JuanSanchez::Circle *pCar = new Circle;
}
What Could be causing this error?
View 8 Replies
View Related
May 4, 2013
How can I access the virtual base class? This is a practice exercise from c++ primer plus 6.
The problem is that the name becomes No Name instead of the name specified when creating the gunslinger, I don't know how I can call the virtual base class explicitly
Output,
#ifndef PERSON_H_
#define PERSON_H_
#include <string>
#include <iostream>
#include <cstdlib>
using std::string;
class person
[code]....
View 7 Replies
View Related
Feb 5, 2013
I've got the following code with output. I can't figure out myself why it's what printed out there. I believe, it has something to deal with overloading/overriding/virtual functions implementations in C++:
class Base{
public: virtual void f(int);
virtual void f(double);
}
[Code].....
Thus here're my conclusions:
1) in line
d.f(1.0);
for some reason compiler preferred casting double->int of the argument and then call to 'Derived::f(int)'.
2)in line
pb->f(1.0);
for some reason compiler preferred call to 'Base::f(double);'. 'Base' is static type of pb, but the dynamic type is 'Derived'.
I believe the answer has to deal with the fact whether virtual table contains in addition to functions' names also the types of arguments they accept. AFAIK, vTable doesn't include such info.
View 7 Replies
View Related
Jul 11, 2014
I want to overload pure virtual function from 3rd party SDK class to put my debug messages like that:
errorStatus aXsaction(){printf(_T("
abort transaction"));transactionManager->abortTransaction();}
#define transactionManager->abortTransaction() aXsaction()
But compiler complains on the minus sign:
error C2008: '-' : unexpected in macro definition
Is it possible to trick the compiler?
View 4 Replies
View Related
Oct 19, 2014
I recall when I first started playing with C++ I was told that you should never use virtual functions unless you absolutely cannot think of a better way to do whatever you are attempting. This is something I have tried to stick to over the years - and indeed is probably why I have never used inheritance or polymorphism much in my own programmes.
However, I notice through a great deal of the code examples offered to questions here and even over on StackOverflow that commentators show no hesitation to recommend code that involves virtual functions. More so, I have even seen several instances here where - what I was taught as, but they may well have a different official name - 'pure virtual functions' (those with definitions inside a class of something like virtual int function_name(void)=0) are demonstrated and I was very clearly taught to avoid those like the plague.
I was wondering therefore has the official thinking changed since the middle nineties on when - and even whether - to use virtual functions in your programmes?
View 9 Replies
View Related
Feb 15, 2013
Is it possible to do something like this:
class A //parent {
public:
virtual void DoSomething() = 0;
};
class B : public A //child {
public:
void DoSomething(string s) override;
}
Where the child member function overrides and changes the parents member function.
I need to pass an array of key states to the Controller class' Update() function but don't want to send it to every class derived from Object (like Controller).
Is this possible or do I have to overload the original Update() member function (but I would need to define the method in Object then (i.e remove the pure virtual function (=0)))
View 4 Replies
View Related
Jan 24, 2014
I have an AbstractAgent base class that manages a background thread. The actual work done in the background thread is accomplished through a pure virtual function call.
Here's the problem: because the base class is initialized prior to the derived class, there is a race condition in which the pure virtual call might occur before the derived class is initialized. Likewise, on teardown the derived class might deconstruct before the base class destructor has a chance to stop the thread.
I'd like to know if there are any well-known patterns for dealing with this problem. All I can think of is providing start() and stop() methods which can be called from the most-derived class's constructor/destructor, but that strikes me as inelegant.
View 4 Replies
View Related
May 29, 2013
I have a 'Graph' class, which has derived classes for Adjacency Matrix and Adjacency List representations.
How do I provide iterators for traversing vertices and edges, when the iterator classes would have different implementations for the different derived classes ?
The following way is the only one I can think of, but seems quite cumbersome.
Code:
class Base {
public:
class BaseIterator {
};
virtual const BaseIterator& begin();
virtual const BaseIterator& end();
[Code] .....
Or is there a pattern for doing this that I'm not aware of ? Would composition be a better idea here compared to polymorphism ? I mean, I can think like..a Graph can 'have' several representation 'objects' within it.
All the involved classes are templates,not sure if that makes the situation different.
View 7 Replies
View Related
Mar 20, 2013
Below is simplified code consists of two classes, namely Parent and Child.
Child is inherited from Parent.
All member functions of class Parent are declared virtual, and they have been overridden in the class Child.
Code 1:
#include <cstdlib>
#include <iostream>
using namespace std;
#define QUANTITY 5
class Parent {
[Code] ....
The output of the code:
Child::showID() -- ID is 1804289383
Child::showID() -- ID is 846930886
Child::showID() -- ID is 1681692777
Child::showID() -- ID is 1714636915
Child::showID() -- ID is 1957747793
Parent::operator=() invoked.
Child::showID() -- ID is 1804289383
Child::showID() -- ID is 846930886
Child::showID() -- ID is 1714636915
Child::showID() -- ID is 1714636915
Child::showID() -- ID is 1957747793
Question:
Why is Parent::operator= invoked instead of Child::operator= ..?
Isn't it already declared virtual and hence would be overridden..?
I need to invoke Child::operator= instead. How to achieve this?
View 12 Replies
View Related
Jan 26, 2013
when I should use pure virtual functions.On the one hand, "TOY" for example should be an abstract class since theres no such thing as "TOY" , there are "toy cars", "toy fighters" etc , but on the other hand I need to force it somehow to be abstract since theres no really a function that any toy should have and implement on his own way (except PRINT maybe).
when I should REALLY use pure virtual functions? And if I want to avoid people from creating TOY objects (for example), the only way is PURE virtual functions. right?
View 4 Replies
View Related
Jul 14, 2014
I know how to create your basic programm that compiles as a CLI or exports and/or saves data to a .txt file... But how does one build a GUI?
I ask because I am currently working on a programm for my Arduino controlled robot, in which I want to have a virtual on screen controller next to a map of my bots path.
View 4 Replies
View Related