Sponsored Content
Top Forums Programming How to make a function friend to both base and derived class Post 302146334 by ennstate on Tuesday 20th of November 2007 03:24:00 AM
Old 11-20-2007
How to make a function friend to both base and derived class

Hi,
I have a base class and derived a class from the base class, i want to print & read the data for the object created for the derived class,so i have overloaded both the << and >> operators and also have done the foward declaration.

Below is the code snippet,
Code:
#include <iostream>

class Line; // Forward Declaration for friend

class Point {
 private:
   int x,y;
 public:
   virtual void draw() ;
   friend std::ostream& operator<< ( std::ostream& , const Line&);
   friend std::istream& operator>> ( std::istream& ,  Line&);
};


class Line : public Point {
 private:
  int color;
 public :
   void draw () { std::cout<< "Drawing a Line" << std::endl; }
   friend std::ostream& operator<< ( std::ostream& , const Line&);
   friend std::istream& operator>> ( std::istream& ,  Line&);
};

inline
std::ostream& operator<< ( std::ostream &os , const Line &out ) {
  os<<"Line: [" << out.x << "," << out.y << " ," << out.color << " ]" << std::endl;
  return os;
}

inline
std::istream& operator>> ( std::istream &is , const Line &in ) {
  std::cout<<"Line x , y , color info: " << std::endl;
  is >> in.x >> in.y >> in.color;
  return is;
}

int main(int argc, char *aargv) {
 Line new_line;
 std::cin>>new_line;
 std::cout<<new_line;
 return(0);
}

Am using g++ and on compiling i get the below errors, how to fix this
Code:
g++ friends.cpp
friends.cpp: In function `std::istream& operator>>(std::istream&, const Line&)   ':
friends.cpp:8: error: `int Point::x' is private
friends.cpp:34: error: within this context
friends.cpp:8: error: `int Point::y' is private
friends.cpp:34: error: within this context
friends.cpp:18: error: `int Line::color' is private
friends.cpp:34: error: within this context

Thanks
Nagarajan G
 

8 More Discussions You Might Find Interesting

1. HP-UX

How to make a loop base on reading a file?

Need help on making a loop script base on what is inside a file... File to read: List.txt List.txt contains below w/c are file name as well: SAMPLEa SAMPLEb SAMPLEc SAMPLEd SAMPLEe SAMPLEf . . . Want to make a loop that will manipulate those that are inside the file.txt w/c are... (3 Replies)
Discussion started by: JohnBalayo
3 Replies

2. Programming

Please help debug this friend class in C++

Please help check an old code: #include <iostream> using namespace std; template <class C> class List { //Linked list of C. template<class U> friend class ListItr; private: class ListEl { public: C val; ListEl* next; ListEl(const C& s, ListEl* n) : val(s) { next = n;} };... (0 Replies)
Discussion started by: learncode
0 Replies

3. Programming

Base class's variables not accessible????

Hi friends, The derived class cannot access the base class's variables in my program. You can have a look at my code, I am actually using class templates. #include <iostream> using namespace std; template <class T> class Sum { friend void Check(Sum &s, T a, T b) { T x,... (2 Replies)
Discussion started by: gabam
2 Replies

4. Programming

C++ compilation error when I use predicate friend function in the std::sort()

Hi, Can anyone tell me why the following program is giving compiler error when I use a friend function of a class as the comparison predicate for the third parameter of std::sort() algorithm? How to correct it, keep the 'friend' intact? #include <iostream> #include <vector> #include <list>... (1 Reply)
Discussion started by: royalibrahim
1 Replies

5. Programming

Size of Derived class, upon virtual base class inheritance

I have the two class definition as follows. class A { public: int a; }; class B : virtual public A{ }; The size of class A is shown as 4, and size of class B is shown as 16. Why is this effect ?. (2 Replies)
Discussion started by: techmonk
2 Replies

6. Programming

Size of derived class, in case of multiple inheritance

Why, here the size of class 'Derived' is 8 ? class Base1 { public: virtual void f() { } }; class Base2 { public: virtual void f() { } }; class Derived : public Base1, Base2 { public: virtual void f() { } }; (1 Reply)
Discussion started by: techmonk
1 Replies

7. Programming

C++ : Base class member function not accessible from derived class

Hello All, I am a learner in C++. I was testing my inheritance knowledge with following piece of code. #include <iostream> using namespace std; class base { public : void display() { cout << "In base display()" << endl; } void display(int k) {... (2 Replies)
Discussion started by: anand.shah
2 Replies

8. Shell Programming and Scripting

Derived both lines base on pattern

Dear All, I have a requests to retrieve all lines if second line last columns meets certain criteria. Here is the output of the result Table: DSSBDW.DA_MASK_CLK_AR 120908 0 86 86 - 1934528 0 70 100 -*- Table: DSSBDW.DA_MASK_CLK_IP 310657 22030 143 185 - 5281169 7 88 77 *-* Table:... (5 Replies)
Discussion started by: ckwan123
5 Replies
StateVarView(3U)					    InterViews Reference Manual 					  StateVarView(3U)

NAME
StateVarView - state variable view base class SYNOPSIS
#include <Unidraw/stateview.h> DESCRIPTION
StateVarView is the base class for state variable views. State variable views provide a graphical interface to examining and potentially modifying a state variable subject. The StateVarView base class is an abstract class derived from MonoScene. Like MonoScene, the State- VarView class is not instantiated; instead, subclasses add state and behavior appropriate for displaying and editing their subject. Like other MonoScene subclasses, StateVarView subclasses use an interactor composition to define their appearance. PUBLIC OPERATIONS
virtual void Update() Update the state variable view in response to a change in state it depends on (typically the subject's). This operation does not normally need redefinition if Init and Stale (described below) are redefined. PROTECTED OPERATIONS
StateVarView(StateVar*) Subclass constructors normally take an instance of the corresponding subject as an argument. The base class constructor automati- cally attaches the view to the subject. virtual void Init() Initialize the view based on information in the subject. Subclasses redefine this operation according to their semantics; it does nothing by default. virtual boolean Stale() Return whether the view is in any way inconsistent with its subject. This operation always returns true by default; subclasses can redefine it to make a more discerning decision. SEE ALSO
MonoScene(3I), StateVar(3U) Unidraw 6 August 1990 StateVarView(3U)
All times are GMT -4. The time now is 05:18 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy