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
Derived(3)						User Contributed Perl Documentation						Derived(3)

NAME
Tk::Derived - Base class for widgets derived from others SYNOPSIS
package Tk::MyNewWidget; use Tk::widgets qw/ BaseWidget, list of Tk widgets /; use base qw/ Tk::Derived Tk::BaseWidget /; Construct Tk::Widget 'MyNewWidget'; sub ClassInit { my( $class, $mw ) = @_; #... e.g., class bindings here ... $class->SUPER::ClassInit( $mw ); } sub Populate { my( $self, $args ) = @_; my $flag = delete $args->{-flag}; if( defined $flag ) { # handle -flag => xxx which can only be done at create # time the delete above ensures that new() does not try # and do $self->configure( -flag => xxx ); } $self->SUPER::Populate( $args ); $self = $self->Component( ... ); $self->Delegates( ... ); $self->ConfigSpecs( '-cursor' => [ SELF, 'cursor', 'Cursor', undef ], '-something' => [ METHOD, dbName, dbClass, default ], '-text' => [ $label, dbName, dbClass, default ], '-heading' => [ {-text => $head}, heading, Heading, 'My Heading' ], ); } sub something { my( $self, $value) = @_; if ( @_ > 1 ) { # set it } return # current value } DESCRIPTION
Tk::Derived is used with Perl's multiple inheritance to override some methods normally inherited from Tk::Widget. Tk::Derived should precede any Tk widgets in the class's base class definition. Tk::Derived's main purpose is to apply wrappers to "configure" and "cget" methods of widgets to allow the derived widget to add to or modify behaviour of the configure options supported by the base widget. The derived class should normally override the "Populate" method provided by Tk::Derived and call "ConfigSpecs" to declare configure options. The public methods provided by Tk::Derived are as follows: ->ConfigSpecs(-key => [kind, name, Class, default], ...) SEE ALSO
Tk::ConfigSpecs Tk::mega Tk::composite perl v5.12.1 2007-05-05 Derived(3)
All times are GMT -4. The time now is 09:21 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy