C++ :: Overloading Stream Operators On Derived Classes
Apr 16, 2014
S I want to have different >> operators for several derived classes. Has I tested...
Code: class base{
friend std::istream & operator>>(std::istream & in, base & v);
public:
base();
[Code]......
I noticed that the base operator is the only one being called for all 3 objects. which makes sense and now that I think about it I am more surprised that the "derived operators" compiled at all.
Still, how would I go about declaring different overloaded operators for the different classes?
View 4 Replies
ADVERTISEMENT
Jul 29, 2014
Code:
class Var {
public:
Var();
~Var();
private:
QMap<QString, QSharedPointer<Data>> _mapVars;
};
QDataStream &operator<<(QDataStream &stream, const QSharedPointer<Data> p_data);
QDataStream &operator>>(QDataStream &stream, Data &p_data)
I want to serialize _mapVars into a file. However, I have many other classes that are derived from Data, do i need to check for Data type inside the overloaded << functions like below in order to serialize ??? This doesn';t seem to be very correct ...
Code:
QDataStream &operator<<(QDataStream &stream, const QSharedPointer<Data> p_data) {
if(p_data->GetType == .....) {
}
}
View 7 Replies
View Related
Dec 14, 2014
Is is possible to force derived classed to overload certain operators, like we do with pure virtual functions?
Is this possible to dynamically bind objects to their respective overloaded operators?
I am getting errors with undefined references to my base class vtable when I hackly try to overload: Code: operator+ I am not sure whether this is possible.
View 7 Replies
View Related
Nov 7, 2014
I have two class GameOfLife and Cell and i want to overload square braket for class GameOfLife."if g is a GameOfLife object, g[10][5] will return the Cell at row 10 and column 5. If there is no such Cells, then it will return a new Cell with position (-1000,- 1000)."
but if g[10][1000] and 1000>cols,then it returns different Cell exp (3,2) How i do control the col ( [row][col] )?
Code: vector<Cell> GameOfLife::operator [](const int row){
vector<Cell> rowCell;
for(int i=0; i<cols; ++i)
{
if( isLive(row,i) )
rowCell.push_back( Cell(row,i) );
else
rowCell.push_back( Cell(-1000,-1000) );
}
return rowCell;
}
View 6 Replies
View Related
Oct 30, 2014
I have a small piece of code that used the set::insert function on a set of myClass. For that, I need to overload the < and > operators, which I have, but I still get a huge error saying it can't compare.
set<MyClass> mySet;
MyClass myClass
All the class information gets filled in. Then, I try to insert...
mySet.insert(myClass);
bool operator<(MyClass &lhs, MyClass &rhs) {
return lhs.name < rhs.name; //name is a string
}
The error says
...stl_function.h:230:22: error: no match for 'operator<' in '__x < __y'
MyFile.h:80:6: note: candidate is bool operator<(MyClass&, MyClass&)
View 5 Replies
View Related
Aug 28, 2014
I made a program that allows the user to enter information of credit cards on an array of size 5, however I need to allow the user to compare the five credit cards with each other and I am having problems with this particular part. I made my bool operator functions for the operator< and the operator> but how to make the user be able to select which cards he wants to compare and how to compare them. My code is the following:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int SIZE = 5;
enum OPCIONES {CARGAR=1, ABONAR, NADA};
[Code] ......
View 2 Replies
View Related
Nov 24, 2013
I must overload [] but at the same time I must use polymorphism. I wonder if using polymorphism affects operators overloading since when I modified the first class by writing "virtual":
virtual void mostrarDatos(char*, char*, char*);
virtual void calcularEdad(int);
So I can do the polymorphism, it affects the part of the code where suppose to do an addition:
s=student1+=student2;
t=student3+=student4;
u=s+=t;
if I do that, it shows some strange numbers instead of the right ones. Here is the complete code:
.h
#ifndef PERSON_H
#define PERSON_H
#include <iostream>
using namespace std;
class persona {
[Code] ......
View 2 Replies
View Related
Dec 20, 2013
I build a nice class that i need the output be possible in char * and in string. But how I can do for the compiler don't be confused between them?
Code:
operator char*() {
return (char *) result.c_str();
}
These works fine. and for string, i must casting it. but i want do anotherone for string... how can i do it? I tried:
Code:
operator string() {
return result;
}
But the compiler stays confused or something
View 14 Replies
View Related
Oct 1, 2013
I wrote a class that can display fractions ex. 1/4 and I cannot figure out how to get >> to process 1/4 and separate them into variables numerator and denominator.
my program just constantly creates RationalNumber Objects when it reaches cin >> A .
my overloaded stream extraction function:
istream& operator >> (istream& in, const RationalNumber& rn)
{
char L;
[Code].....
View 1 Replies
View Related
Nov 11, 2014
I am stucked in a problem of overloading arithmetic operators such as "+,*" for a class in the form
class Point {
int N; // dimension of the point
double *Pos; // length of N
}
My assign operator is :
Point& Point::operator= (const Point& pt) {
N= pt.N;
if(Pos == NULL) Pos = new double[N];
memcpy(Pos, pt.Pos, N*sizeof(double));
[Code] ....
The add operator "+" is:
Point operator+( const Point& pt1, const Point& pt2 ) {
Point ptr = Point(pt); // this is a constructor
for (int i=0; i<pt1.N; i++) ptr.Pos[i] += pt2.Pos[i];
return ptr;
}
Based on the above overloading, What I am going to do is :
P = alpha*P1 + beta*P2; // alpha and beta are double constants, P1 and P2 are Points objes
It is ok with Intel C++ 14.0 compiler, but does not work with the microsoft visual c++ 2012 compiler in debug mode in visual studio 2012.
I stepped in those operators and found that visual c++ compiler deconstructs the ptr in operators "*" and "+" before its return while intel c++ finished the operation P = alpha*P1 + beta*P2; and delete those ptrs at last.
Portability of my operator overloading is worse. How to get those arithmetic operators overloading for class with pointers in it.
View 3 Replies
View Related
Sep 25, 2013
the question am having problems with..
1.Write a class function that defines adding, subtracting, multiplying and dividing fractions by overloading standard operators for the operations.
2. Write a function member for reducing factors and overload I/O operators to input and output fractions. how would i set this up?
View 5 Replies
View Related
Feb 5, 2013
I am making a vector class and am having some problems creating the overloaded arithmetic operators and assignment operators.
Here is an example of my "+=" code as it stands the errors are similar/the same for the other operators except "=" operator which works fine:
Vector3& Vector3::operator+=(const Vector3 &rhs) {
Vector3 tmp = *this;
Set(tmp.getX() + rhs.getX(), tmp.getY() + rhs.getY(), tmp.getZ() + rhs.getZ());
return *this;
}
I have tried a lot of different approaches ad always get the error:
error: passing 'const Vector3' as 'this' argument of 'double Vector3::getX()' discards qualifiers
error: passing 'const Vector3' as 'this' argument of 'double Vector3::getY()' discards qualifiers
error: passing 'const Vector3' as 'this' argument of 'double Vector3::getZ()' discards qualifiers
View 5 Replies
View Related
Aug 7, 2013
I'm working with inheritance and pure virtual functions, and I want to overload an output stream operator. However, every time I run the program I get this: 0x7fff00ee98c0.
I'll include a base class and a derived class so you can see what I'm talking about.
Base:
#include <iostream>
using namespace std;
#ifndef _Insurance_h_
#define _Insurance_h_
[Code]....
The application is something like this (I'm assuming the user has already inputted the name, salesperson, make, model, etc):
#include "Auto.h"
#include <iostream>
using namespace std;
#include <vector>
vector<Insurance *> sales;
[Code] .....
View 4 Replies
View Related
May 5, 2013
I've created a base DLL for all my future DLL's, a way of getting version numbers and such and that compiles fine, but I can't add it into a class for a new DLL. All the headers do have an appropriate cpp to define the function declarations (and they compile fine).
All for the base DLL I have:
LibVer.h
Version.cpp
Function.cpp
LibVer.h
#pragma once
#include <vector>
#define DLLEXPORT 1
#define DLLIMPORT 2
#define DLL DLLIMPORT
[Code] .....
View 6 Replies
View Related
Jul 26, 2012
Try to implement overloading << operator. If I done it void then everything work fine (see comment out) if I make it class of ostream& then the operator return to me some memory address.
Code:
#ifndef Point_HPP // anti multiply including gates
#define Point_HPP
#include <sstream>
class Point {
private:// declaration of private data members
double x;// X coordinate
double y;// Y coordinate
[Code] .....
View 7 Replies
View Related
Apr 7, 2014
As long as no base class constructor takes any arguments, the derived class need not have any constructor, if one or more arguments are used then it is mandatory for the derived class to have a constructor and pass the arguments to base class constructors. While applying inheritance, we usually create objects using derived class. Then it makes sense for the derived class to pass arguments to the base class constructor. When both the base and derived class contain constructors ,the base class constructor is execute first.
In case of multiple inheritance, the base classes are constructed ,in the order in which they appear in the declaration of the derived class. Similarly in a multiple inheritance the constructors will be executed in order of inheritance. Since the derived class takes the responsibility to supply initial values to the base class,we supply the initial values that are required by all the classes together where the derived class object is declared.
The constructor of the derived class receives the entire list of values of arguments and pass them on to the base constructors int the order in which they are declared in the derived class
View 1 Replies
View Related
Apr 6, 2013
Is it possible to overload a variable in a derived class? Example:
struct Circle
{
int radius() const { return r; }
private:
int r;
}
struct Smiley : Circle
{
// inherits the function int radius() const, but doesn't return Smiley::r
private:
int r;
}
View 7 Replies
View Related
Dec 6, 2014
I am working on a school project and am stuck in the debugging. I am compiling with g++ and am using c++11.
Error message
In file included from /usr/include/c++/4.7/algorithm:63:0,
from date.h:7,
from date.cpp:1,
from schedule.h:1,
from schedule.cpp:1,
from date_driver.cpp:1:
[Code] ....
Here are my overloaded operators for my date class.
bool Date :: operator == (Date otherDate){
if (((otherDate.getDay () == getDay ()) && (otherDate.getMonth () == getMonth ())) && (otherDate.getYear () == getYear ()))
[Code] .....
View 1 Replies
View Related
Mar 11, 2013
class A {
// is abstract
};
class B : public A {
// ...
};
[Code] ....
[Code] ....
main3.cpp: In member function ‘FooB& FooB::operator=(const FooC&)’:
main3.cpp:46:44: error: expected ‘(’ before ‘other’
main3.cpp:46:49: error: no matching function for call to ‘Foo<C>::Foo(const FooC&)’
main3.cpp:46:49: note: candidates are:
main3.cpp:19:2: note: Foo<T>::Foo() [with T = C]
main3.cpp:19:2: note: candidate expects 0 arguments, 1 provided
main3.cpp:16:25: note: Foo<C>::Foo(const Foo<C>&)
main3.cpp:16:25: note: no known conversion for argument 1 from ‘const FooC’ to ‘const Foo<C>&’
Is there any way to make it work?
View 1 Replies
View Related
Jan 19, 2014
I need to access the functions of the derived classes from a vector of objects of base classes (can't believe I wrote it). Here a Diagram for you to understand:
So as you see, I need the function Use() from the Usable class, to be able to be called from the vector like:
inventory.at(x)->Use()
View 14 Replies
View Related
Apr 30, 2013
how to create a base class that is derived (inherited) by three other classes?
View 12 Replies
View Related
Nov 21, 2013
I use a CArray<CClase1,CClase1> m_Clases1.
CClase1 is derived of CObject. " class CClase1 : public CObject"
When, at last I do : "m_Clases1.RemoveAll()" , I suppose that the CClase1 destructor is called. But when i do this the program fails.
View 6 Replies
View Related
Apr 19, 2013
I have a class A, from which three classes Aa Ab and Ac are inherited. In class A I have defined some functions by virtual foo()=0, which I implemented in each subclass. Each class is written in a separated .h and .cpp file.
However, now I think it is possible to overload the operator+ INSIDE each class (including pure virtual in class A), such that something like
int main() {
A *value = new Aa();
A value2 = *value + 1.0f;
}
This should be realizable, because the operator+ is part of the Aa class. Now, I would like to do something like
int main() {
A *value = new Aa();
A value2 = 1.0f + *value;
}
This time, I expect I cannot overwrite the operator+, because it is not part of either class A or class Aa.
View 7 Replies
View Related
Dec 27, 2012
I'm looking at writing my own plug-in app, but I know that deleting class instances that were created in a plug-in module can result in the dreaded "undefined behaviour" because of the different memory spaces. Many examples of plug-ins use create_class and destroy_class functions to resolve this problem, but I wondered about overriding / overloading the class's new and delete operators. This would be used for all third-party library class derivations (e.g. derived GUI classes) and all home-grown classes.
The operators would only be declared in the class declaration:
class PluginBase {
public:
void *operator new(std::size_t n);
void operator delete(void *p);
// Other plugin bits
While the actual implementation would be defined in the plug-in's implementation file:
#include "PluginBase.h"
void *PluginBase::operator new(std::size_t n) {
return ::operator new(n);
[Cvoid PluginBase::operator delete(void *p) {
return ::operator delete(p);
}
This would need to be implemented in every transferable plug-in class (possibly by a crafty IMPLEMENT_PLUGIN(classname) macro or some other mechanism), but before I commit this to my code I was hoping for feedback. Does this sound like a good idea? The GUI classes in particular are handled by a third-party library, so it's some memory-space safe way of deleting them by the GUI library (in the app) that I'm looking for.
View 11 Replies
View Related
Apr 29, 2013
I wrote a program to write text contents to file stream through fputs, the file stream address was changed in the middle of writing text content to the stream (11% text content have been put into the file stream), that cause the file stream pointer can be evaluated problem and raise exception on stream validation code in fputs library function, my question is what things could go wrong to make file stream pointer changed its address to something else or a NULL pointer if the file stream have not been flushed and closed.
View 5 Replies
View Related
Oct 5, 2013
I have an array of (Student)classes created in Manager.h, which contains a new instance of class Name (name),(in Student.h)How would I go about accessing the SetFirstName method in Name.cpp if I was in a class Manager.cpp? I have tried using Students[i].name.SetFirstName("name");
// In Manager.h
#include"Student.h"
class Manager
{
[Code]....
View 2 Replies
View Related