关于<<重载和友元 [问题点数:20分,结帖人lhw7791086]

Bbs1
本版专家分:2
结帖率 100%
Bbs4
本版专家分:1227
Bbs5
本版专家分:2871
Bbs7
本版专家分:11474
Blank
黄花 2014年6月 C/C++大版内专家分月排行榜第二
Bbs1
本版专家分:22
Bbs8
本版专家分:33509
Blank
黄花 2014年7月 C/C++大版内专家分月排行榜第二
2014年5月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2014年10月 C/C++大版内专家分月排行榜第三
2014年4月 C/C++大版内专家分月排行榜第三
Bbs1
本版专家分:2
关于友元重载符号的问题
代码如下:rnclass Arnrnpublic:rn friend ostream& operator<<<(ostream& o,A& a)rnrn a.i;//就是这里报错rn return o;rnrn编译器vs6.0编译出错,提示:cannot access private member declared in class A
友元重载二元操作符
[code=C/C++]rn// Time.hrnclass Time rnrnpublic:rn Time(int h,int m);rn friend Time operator*(double m, const Time& t);rn friend ostream& operator << (ostream& os, const Time& t);rnprivate:rn int hours;rn int minutes;rn;rn// Time.cpprnTime operator*(double m, const Time& t)rnrn int a = t.hours; // OKrn int b = t.minutes; // OKrn return t*m;rnrnrnostream& operator << (ostream& os, const Time& t)rnrn os<
重载、初始化列表、友元
1、函数<em>重载</em>(overload):在同一作用域中,函数名相同,参数列表不同,则多个函数形成<em>重载</em> 参数列表不通:参数类型不同或者个数不同 CPoint(float _x = 0, _y = 0); //构造函数声明 //默认实例化对象在没有赋值情况下x = 0,y = 0,因此在用此函数时,不能定义无参构造 函数,以免产生二义性;CPoint::CPoint(f
友元与符号重载
1、<em>友元</em> (1)<em>友元</em>函数:如果一个函数是类A的<em>友元</em>函数,那么改函数可以通过对象使用A中的所有成员(破坏了类的封装性) 使用方法:在类中声明函数,在函数名前面添加friend. 注意: <em>友元</em>的声明不受访问控制符的限制,可以在类中的任意位置声明,一般放在类的最开始位置,便于查找。 <em>友元</em>函数是“友”,不属于类的内部成员函数,是外部函数,因此没有隐藏的this指针 (2)<em>友元</em>类:如果类A是类B的<em>友元</em>类,那...
VC6对友元重载<
随便写个<em>重载</em><
模板类的友元重载
c++代码实现模板类的<em>友元</em><em>重载</em>#include using namespace std;template class Test;template ostream& operator< &obj);template class Test { private
友元重载、模板、static
一、<em>友元</em>函数与<em>友元</em>类         1、<em>友元</em>关系的作用         <em>友元</em>关系提供了便捷,程序运行的效率,但是<em>友元</em>关系也破坏了类的封装性,使得非成员函数也可以访问类的私有成员。          2、<em>友元</em>函数的使用         使用规则:             <em>友元</em>函数使用friend关键字,可以定义在类的任意位置             <em>友元</em>全局函数在类外全局定义,<em>友元</em>成员函数在另一个...
求助,友元 重载操作符
#include rn#include rn#include rn#include rnrnclass GT_clsrnpublic:rn GT_cls(int val):bound(val)rn rn rn bool operator()(const std::string& s)rn return s.size()>=bound;rn rnfriend std::istream& operator>>(std::istream& in, std::vector& str)rn std::string s;rn for(std::string::size_type ix=0;ix>words;rn std::cout<
模板 友元重载<<
#include rnrnusing namespace std;rnrntemplate class MyQueue;rnrntemplate rnstd::ostream& operator<<< (std::ostream &os, const Queue &Q);rnrn QueueItem(const T &t):item(t), next(0) rnrn T item;rn QueueItem *next;rn;rnrnrnrnMain.cpprnd:\my project\queue\queue\queueitem.h(8) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrnd:\my project\queue\queue\queueitem.h(8) : error C2143: 语法错误 : 缺少“,”(在“<”的前面)rn生成日志保存在“file://d:\My Project\Queue\Queue\Debug\BuildLog.htm”rnQueue - 2 个错误,0 个警告
C++ 引用、友元重载
C++面向对象程序设计重要内容--引用与指针、<em>友元</em>、<em>重载</em>
C++重载操作符 友元
#include rn#includernusing namespace std;rnrnclass onernrnprivate:rn string number;rn int score;rn friend int operator-(one& obj_1,one& obj_2);rnpublic:rn one(string num,int score1):number(num),score(score1)rnrn ~one()rn int operator+(one& obj)rn rn return score+obj.score;rn rn;rnint operator-(one& obj_1,one& obj_2)rnrn return obj_1.score-obj_2.score;rnrnint main()rnrn one obj1("first",80);rn one obj2("second",40);rn cout<
有关重载友元<
//LinearList.hrnrn#includernrnusing namespace std;rnrntemplaternclass LinearListrn friend ostream& operator<<< _length; ++i )rn out<< _elem[i] << ",";rn rn out<< endl;rn return out;rn;rnrnrn//test.cpprnrn#includern#includern#include"LinearList.h"rnrnusing namespace std;rnrnint main()rnrn tryrn LinearList l(5);rn cout<< " length = " << l.length() << "\n"rn << " isEmpty = " << l.isEmpty() << "\n";rn l.insert( 0, 2 ).insert( 0 , 6 );rn cout<< " length = " << l.length() << "\n"rn << " isEmpty = " << l.isEmpty() << "\n";rn int z;rn l.find( 1, z );rn cout<< " first element is " << z << "\n"rn << " length = " << l.length() << "\n";rn l.del(1, z );rn cout<< " delete element is " << z << "\n"rn << " list is " << l << endl;rn rn catch(...) rn cerr<< "an exception has occurred" << endl;rn rn system( "pause" );rnrnrn编译出错:rn25 D:\cpp\LinearList.hrn[Warning] friend declaration `class ostream & operator <<
关于友元重载,程序出错了,麻烦看下
不知道为什么编译器(VC 2008)识别不了,我定义的<em>友元</em>函数的<em>重载</em>.麻烦大家看看rnrn[code=C/C++]// string1.h -- fixed and augmented string class definitionrn#include rnusing std::ostream;rnusing std::istream;rnrn#ifndef STRING2_H_rn#define STRING2_H_rnclass Stringrnrnprivate:rn char * str; // pointer to stringrn int len; // length of stringrn static int num_strings; // number of objectsrn static const int CINLIM = 80; // cin input limitrnpublic:rn// constructors and other methodsrn String(const char * s); // constructorrn String(); // default constructorrn String(const String &s); // copy constructorrn ~String(); // destructorrn int length () const return len; rn// overloaded operator methods rn String & operator=(const String &s);rn String & operator=(const char *s);rn String operator+(const String &s);rn //String operator+(const char *s);rn void StringLow();rn void StringUp();rn int Has(const char s);rn char & operator[](int i);rn const char & operator[](int i)const;rn// overloaded operator friendsrn friend String operator+(const char *s,const String &st);//this is the problemrn friend bool operator(const String &st1, const String &st2);rn friend bool operator==(const String &st, const String &st2);rn //friend String operator+(const String &s1,const String &s2);rn friend ostream & operator<>(istream & is, String & st);rn// static functionrn static int HowMany();rn;rn#endifrnrn// string1.cpp -- String class methodsrn#include // string.h for somern#include rn#include "string2.h" // includes rnusing std::cin;rnusing std::cout;rnrn// initializing static class memberrnrnint String::num_strings = 0;rnrn// static methodrnint String::HowMany()rnrn return num_strings;rnrnrn// class methodsrnString::String(const char * s) // construct String from C stringrnrn len = std::strlen(s); // set sizern str = new char[len + 1]; // allot storagern std::strcpy(str, s); // initialize pointerrn num_strings++; // set object countrnrnrnString::String() // default constructorrnrn len = 1;rn str = new char[1];rn str[0] = '\0'; // default stringrn num_strings++;rnrnrnString::String(const String & st)rnrn num_strings++; // handle static member updatern len = st.len; // same lengthrn str = new char [len + 1]; // allot spacern std::strcpy(str, st.str); // copy string to new locationrnrnrnString::~String() // necessary destructorrnrn --num_strings; // requiredrn delete [] str; // requiredrnrnrn// overloaded operator methods rnrn // assign a String to a StringrnString & String::operator=(const String & st)rnrn if (this == &st)rn return *this;rn delete [] str;rn len = st.len;rn str = new char[len + 1];rn std::strcpy(str, st.str);rn return *this;rnrnrn // assign a C string to a StringrnString & String::operator=(const char * s)rnrn delete [] str;rn len = std::strlen(s);rn str = new char[len + 1];rn std::strcpy(str, s);rn return *this;rnrn//add two stringrnrnString String::operator +(const String &s)rnrn rn String sum;rn sum.len = len + s.len;rn sum.str = new char[sum.len+1];rn std::strcpy(sum.str,str);rn std::strcat(sum.str,s.str);rn return sum;rnrnrnString String::operator +(const char *s)rnrn String sum;rn sum.len = len + strlen(s);rn sum.str = new char[sum.len+1];rn std::strcpy(sum.str,str);rn std::strcat(sum.str,s);rn return sum;rnrnrnString operator+(const char *s,const String &st)rnrn String sum;rn sum.len = st.len + strlen(s);rn sum.str = new char[sum.len+1];rn std::strcpy(sum.str,s);rn std::strcat(sum.str,st.str);rn return sum;rnrnrnvoid String::StringLow()rn rn int i;rn for(i=0;i(const String &st1, const String &st2)rnrn return st2.str < st1.str;rnrnrnbool operator==(const String &st1, const String &st2)rnrn return (std::strcmp(st1.str, st2.str) == 0);rnrn/*rnString operator+(const String & s1, const String & s2)rnrn int len = s1.len + s2.len;rn char * ps = new char [len + 1];rn std::strcpy(ps, s1.str);rn std::strcat(ps, s2.str);rn String temp(ps);rn return temp;rnrn*/rnrn // simple String outputrnostream & operator<<< st.str;rn return os; rnrnrn // quick and dirty String inputrnistream & operator>>(istream & is, String & st)rnrn char temp[String::CINLIM];rn is.get(temp, String::CINLIM);rn if (is)rn st = temp;rn while (is && is.get() != '\n')rn continue;rn return is; rnrnrn// pe12-2.cpp ,my version,6.22rn#include rn#include rn#include "string2.h"rnrnrnint main()rnrn using std::cout;rn using std::cin;rn String s1(" and I am a C++ student.");rn String s2 = ("Please enter your name: ");rn String s3;rn cout << s2; // overloaded << operatorrn cin >> s3; // overloaded >> operatorrn s3 ="My name is"+s2; // overloaded =, + operators --运行到这里出错rn rn//错误 1 error C2677: 二进制“+”: 没有找到接受“String”类型的全局运算符(或没有可接受的转换) g:\project\ex1\ex1\usingstr.cpp 16 ex1rnrn cout << s2 << ".\n";rn s2 = s2 + s1;rn s2.StringUp(); // converts string to uppercasern cout << "The string\n" << s2 << "\ncontains " << s2.Has('A')rn << " 'A' characters in it.\n";rn s1 = "red"; // String(const char *),rn // then String & operator=(const String&)rn String rgb[3] = String(s1), String("green"), String("blue");rn cout << "Enter the name of a primary color for mixing light: ";rn String ans;rn bool success = false;rn while (cin >> ans)rn rn ans.StringLow(); // converts string to lowercasern for (int i = 0; i < 3; i++)rn rn if (ans == rgb[i]) // overloaded == operatorrn rn cout << "That's right!\n";rn success = true;rn break;rn rn rn if (success)rn break;rn elsern cout << "Try again!\n";rn rn system("pause");rn return 0;rnrnrn[/code]
关于矩阵模版友元重载问题
我写了一个矩阵模版,其中定义了矩阵和一个数字相加,定义形式rnfriend MatrixL operator + (int x, MatrixL A);rnrn实现rntemplate MatrixL operator + (int x, MatrixL A)rnrn MatrixL C(A.Row(),A.Col());rnrn ....rnrn return C;rnrnrn但是,程序总是提示我说 “MatrixL error LNK2019: 无法解析的外部符号 "class MatrixL __cdecl operator+(int,class MatrixL)" (??H@YA?AV?$MatrixL@H@@HV0@@Z) ,该符号在函数 _main 中被引用”rnrn我使用的编译器是vc.net.rnrn谁能告诉我他错误在那里么?我把这个定义方到类里面就可以通过,放到外边就错误的??rnrn
一个关于重载输出时友元的问题
为什么我在类中的<em>重载</em><<
运算符单例友元重载作业
运算符单例<em>友元</em><em>重载</em>作业,不理解的可以模仿学习。
类域 友元 运算符 重载
类域 <em>友元</em> 运算符 <em>重载</em>类域 <em>友元</em> 运算符 <em>重载</em>类域 <em>友元</em> 运算符 <em>重载</em>
C++ 友元函数实现运算符的重载
C++:<em>友元</em>函数实现流运算符的<em>重载</em> <em>友元</em>函数实现 除一般符号外,还可以<em>重载</em>的特殊符号有: &amp;gt;&amp;gt;(流提取运算符)返回类型必须是istream&amp;amp; operator&amp;gt;&amp;gt;(istream&amp;amp;in,Complex &amp;amp;c) &amp;lt;&amp;lt;(流插入运算符)返回类型必须是ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp;out,
通过友元实现输入输出的重载
实现输入输出的<em>重载</em>
【c++程序】符号的重载友元
/********************************************************/ /**************---About 符号的<em>重载</em>-------**************/ /**************---Author: Tibruce Zhao-----**************/ /**************---Date: 20
使用友元函数实现运算符+重载
各位大哥,我有以下程序,编译出错。rnrn#include rnusing namespace std;rnclass Studentrnrnprivate:rn int age;rn char name[20];rnpublic:rn Student()rn Student(char n[],int a)strcpy(name,n);age=a;rn friend Student operator+(Student s1,Student s2)rn rn Student r;rn r.age=s1.age+s2.age;rn return r;rn rn void showInfo()rn cout<<
帮看下这个友元重载
class TriCoorrnrn int x,y,z;rnpublic:rn TriCoor(int mx=0,int my=0,int mz=0);rn TriCoor operator+(TriCoor t);rn TriCoor& operator++();rn //TriCoor& operator+=();rn TriCoor& operator=(TriCoor t);rn TriCoor operator-(TriCoor t);rn friend ostream& operator<>(istream &input,TriCoor &t);rn int operator()()const;rn TriCoor& operator--();rn //int& operator[](int i)const;rn void show();rn void assign(int mx,int my,int mz);rn;rnrnrnTriCoor& TriCoor::operator=(TriCoor t)rnrn x=t.x;y=t.y;z=t.z;rn return *this;rnrnrnfriend istream& operator>>(istream &input,TriCoor &t)rnrn input>>t.x>>t.y>>t.z;rn return input;rnrn请问下为什么在类中定义的输入输出流,在类外实现会出现错误,而只能在类中实现才不出错.
求指教:友元方式重载<
[/code]de=c][/code]rn#include rn#include rnusing namespace std;rnrntemplaternclass DiagonalMatrixrn rnpublic:rn DiagonalMatrix(int size=10)rn rn n=size;rn d=new T[n];rn rn ~DiagonalMatrix()delete []d;rn DiagonalMatrix& Store(const T& x,int i,int j);rn T Retrieve(int i,int j)const;rn rn friend ostream & operator<>(istream& in,const DiagonalMatrix& x);rn template friend DiagonalMatrix operator+(DiagonalMatrix m1,DiagonalMatrix m2);rn template friend DiagonalMatrix operator-(DiagonalMatrix m1,DiagonalMatrix m2);rn template friend DiagonalMatrix operator*(DiagonalMatrix m1,DiagonalMatrix m2);rn int n;rn T *d;rn;rnrnrnrntemplate rnistream& operator>>(istream& in,const DiagonalMatrix& x)rnrn for(int m=0;m>x.d[m];rn return in;rnrntemplate rnDiagonalMatrix operator+(DiagonalMatrix m1,DiagonalMatrix m2) rnrn if(m1.n!=m2.n)rn cout<<<
友元重载操作符的影响?
class Complexrnrnpublic:rn Complex():_real(0),_image(0)rn Complex(double d1,double d2):_real(d1),_image(d2)rn Complex & operator +(const Complex &C1);rn friend ostream& operator_image+=C1._image;rn return *this;rnrnrnostream& operator<<
C++友元重载+运算符易错点
我今天晚上复习C++类的用法,在使用<em>友元</em><em>重载</em>双目运算符+的时候,出现了一个诡异的错误.百思不得其解,专门重写一个类进行测试,最后发现了原因.猛然想起我之前也犯过这样的错误,以为经典,故记之.   奉上错误代码: #include using namespace std; class Complex { //一个复数类 public: Complex () {} /
C++进阶 -友元函数实现重载
#include #include using namespace std; class student { public: student(){}; student(string n,int g,int a,char s) { name=n; grade=g; age=a; sex=s; } friend ostream&amp; operator&lt;&lt;(o...
c++ 重载操作符友元问题
《c++ primer》里面有一段文字:rnrnSalesitem 类也是说明为何有些操作符需要设置为<em>友元</em>的一个好例子。它rn定义了一个成员操作符,并且有三个非成员操作符。这些非成员操作符需要访问rn私有数据成员,声明为<em>友元</em>:rnrn```rn class Sales_item rnfriend std::istream& operator>>rn(std::istream&, Sales_item&);rnfriend std::ostream& operator<
关于友元
1、首先了解一下<em>关于</em>封装的概念: 把数据成员定义成private的,使类的作者可以轻易简单的修改数据,也就是说,当实现部分需要修改时,我们只需要检查修改类的代码本身就可以,类的具体实现细节可以随时改变,而不用去调整用户级别的代码,因为公共接口没改变。只有类的实现部分使用private的成员,可以在有限的范围内定位。如果数据是public 的,那么所有使用了public数据成员的代码都必须修改。封装的好处显而易见。 2、<em>友元</em>概念及用法: 通过将其他类或者函数声明成该类的<em>友元</em>(friend),使该类可以允许其他
关于友元??
定义<em>友元</em>最主要想在main()中使用Tclass的私有成员rnrnclass Tclassrnrn friend void ::main();为什么这里会出错rn T i,j;rn;rnrnvoid main()rnrn Tclass kk;rn kk.i=12;rn rn int i;rn cin>>i; rn
关于友元
这是《C++ PRIMER PLUS》上的例子,但我在vc6。0上就是通不过,请大家指教rnmytime1.hrn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\rn#ifndef MYTIME_H_rn#define MYTIME_H_rn#include rnusing namespace std;rnrnclass Timernrnprivate:rn int hours;rn int minutes;rnpublic:rn Time();rn Time(int h,int m=0);rn void AddMin(int m);rn void AddHr(int h);rn void Reset(int h=0,int m=0);rn Time operator +(const Time& t) const;rn Time operator *(double n) const;rn friend Time operator* (double m,const Time & t);rn rn void Show() const;rn friend ostream & operator<<<
关于友元??
class Shapern rnpublic:rn friend void Circle::a(Shape &ape); 为什么这里会报错??用“friend class Circle”没事,但只允许类中的一个方法,为什么会错呢??rn Shape();rnprivate:rn int mx;rn;rnrnclass Circlern rnpublic: rn void a(Shape &ape)rn rn ape.mx=23;rn rn;
重载 友元 访问 私有成员的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
istream& operator >>(istream& ins, Complex& com)rnrncout<>com.real;rncout<>com.imaginary;rnreturn ins;rnrnrnostream& operator <<
多态性类的友元重载相关注意点
我将发几种情况进行对比,希望能对你们有所帮助#include&amp;lt;iostream&amp;gt;using namespace std;class complex{private:    int i,r;public:    complex(int a=0,int b=0):r(a),i(b){};    complex operator+(complex b);    void printf()  ...
类用友元重载+时遇到的问题
#includern#includernrnclass Strrnrn int length;rn char *p;rnpublic:rn Str()rn rn p=new char[100];rn rn Str(char *s)rn rn p=new char [100];rn strcpy(p,s);rn rn Str(const Str &obj)rn rn p=obj.getp();rn rn ~Str()rn rn delete []p;rn rn friend Str operator+(const Str &s1,const Str &s2);rn void operator =(const Str &obj);rn char* getp()constrn rn return p;rn rn void setp(char *s)rn rn strcpy(p,s);rn rn void show()rn rn length=strlen(p);rn cout<<
友元函数实现左移右移操作符的重载
#include &amp;lt;iostream&amp;gt; using namespace std; class Complex { public:     Complex(int a=0,int b=0)     {         this-&amp;gt;a = a;         this-&amp;gt;b = b;     }     friend Complex operator+(Complex c...
友元重载、模板(10月6号学习总结)
今日内容: 1.复习了<em>友元</em>函数 (1)C++语言通过<em>友元</em>函数提供从类的外部直接访问类中所有访问权限成员的接口,但破坏了类的封装性,应谨慎使用。 (2)<em>友元</em>函数的形参通常是类的对象、对象的引用或指针。 (3)friend  float V1(CLASS &);类体内原型说明 (4)注意<em>友元</em>函数与成员函数的区别 2.复习了运算符<em>重载</em> (1)函数类型 operator 运算符(形参列表)
重载(声明为友元)错在哪里? ,在线。">"<重载(声明为友元)错在哪里? ,在线。
#include rn#include rnusing namespace std;rnrnclass Urn public:rn U(int m,int n)rn i=m; //(12)行rn j=n; //(13)rn rn protected:rn int i;rn int j;rn friend ostream& operator << (ostream& oo,U u); //<em>友元</em>rn;rnrnostream& operator << (ostream& oo,U u)rn oo << u.i << u.j; //(21)rn return oo;rnrnrnvoid main()rn rn U u(3,5);rn cout << u; //(28)rnrnrn(21) : error C2248: 'i' : cannot access protected member declared in class 'U'rn(12) : see declaration of 'i'rn(21) : error C2248: 'j' : cannot access protected member declared in class 'U'rn(13) : see declaration of 'j'rn(28)error C2593: 'operator < is ambiguous
友元重载的问题,详见下述代码
[code=#includernusing namespace std;rntemplaternclass Test;rntemplaternostream& operator<<< <>rn (ostream& out,const Test &obj);rn;rnrntemplaternostream& operator<< t(2);rn cout<
运算符>>重载为类的友元出错
头文件array:rnclass CArrayrnpublic:rn CArray(int n = 20);rn CArray(CArray&);//拷贝构造函数rn ~CArray();rn int getsize() const;//返回数组长度rn const CArray &operator = (const CArray&);//<em>重载</em>赋值运算符=rn bool operator == (const CArray&) const;//<em>重载</em>==rn bool operator != (const CArray&) const;//<em>重载</em>!=rn int &operator [] (int) const;//<em>重载</em>[]rn [color=#FF0000]friend istream &operator >> (istream&, const CArray&);//<em>重载</em>>>[/color]rn[color=#FF0000] friend ostream &operator << (ostream&, const CArray&);//<em>重载</em>e:\ccode\text\array\array\array.h(11): error C2433: “istream”: 不允许在数据声明中使用“friend”rn1>e:\ccode\text\array\array\array.h(11): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>e:\ccode\text\array\array\array.h(11): error C2061: 语法错误: 标识符“istream”rn1>e:\ccode\text\array\array\array.h(11): error C2805: 二进制“operator >>”的参数太少rn1>e:\ccode\text\array\array\array.h(12): error C2143: 语法错误 : 缺少“;”(在“&”的前面)rn1>e:\ccode\text\array\array\array.h(12): error C2433: “ostream”: 不允许在数据声明中使用“friend”rn1>e:\ccode\text\array\array\array.h(12): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intrn1>e:\ccode\text\array\array\array.h(12): error C2061: 语法错误: 标识符“ostream”rn1>e:\ccode\text\array\array\array.h(12): error C2805: 二进制“operator >”: 没有找到接受“CArray”类型的右操作数的运算符(或没有可接受的转换)rn
为什么vc++输入输出符重载用不了友元
本人一直都用borland, 前一阵子发现vc++无法用输出输入符<em>重载</em>, 后来发现原来是无法识别<em>友元</em>,程序如下:rnrntemplate rnclass listrn public:rn ………… rn rn friend ostream& operator<< (ostream& os, const list& value)rn for(node* p=value.head->next; p!=NULL; p=p->next)rn os<<;rn return os;rn rnrn protected:rn node *head;rn ;rnrn在borland下可以调用输出符<em>重载</em><em>友元</em>函数,但在vc++下却会报错,为什么呢??rn
<>重载必须申明为类的友元?
我感觉可以不用申明为<em>友元</em>.rn[code=C/C++]rnclass Arnrnprivate:rn int x;rnpublic:rn A(int x_ = 0):x(x_) rn void Print(void) constrn rn cout << x << endl;rn rnrnrnstd::istream& operator << (std::ostream is,const Book& rhs)rnrn rhs.Print();rn return os;rnrn[/code]rn我想的是尽量减少<em>友元</em>,但是好像行不通....
模板类与类模板的区别以及模板类的友元重载
#include using namespace std;template class Test;//声明template ostream& operator< &obj);//声明template class Test { private: int nu
vc6+w2k居然不支持+和-的友元重载,但*和/却可以友元重载,各位试一下给出答案
#includernrnusing namespace std;rnclass locrn int longitude,latitude;rnpublic:rn loc();rn loc(int lg,int lt)rn longitude=lg;rn latitude=lt;rn rn void show()rn cout<
C++重载(2):通过成员函数和友元函数重载
分别通过成员函数和<em>友元</em>函数完成<em>重载</em> #include &amp;lt;iostream&amp;gt; using namespace std; class Complex { public: Complex(double real =0,double imag=0):real(real),imag(imag){}; //构造函数,包含有参数的和没有参数的,默认为0,0 Complex(const ...
基于模板参数的友元重载opearto<<常见问题
对于模板下的类定义,一般<em>重载</em>operator 我们习惯性写法: template class A { public: A(string value): data(value){} friend ostream& operator& me); private: T data; }; template ostream& operator& me) { cout
一道题:必有分送!(关于重载符,友元
<em>重载</em>“*”为<em>友元</em>算符,求A=K*Brn其中A ,B是3*3矩阵,K是一个整数。rnrn哪位高手出出手,小弟谢过了。
关于C++中的友元
<em>友元</em>可以实现在类外定义,但是能提供跟类内的成员一样的访问权限,它能访问类中的所有成员即使是private的(不过要注意继承的情况,父类的private是不能访问的,不过子类的成员也是不能访问父类的private的,所以可以认为<em>友元</em>的权限跟类自身的成员访问权限一样)。 C++中的<em>友元</em>可分为三类:<em>友元</em>函数,<em>友元</em>类,类的成员函数是另一类的<em>友元</em>函数; <em>友元</em>的作用是实现类之间的数据共享,减小系统开销,提
关于友元的问题
大家好:rn 我想知道一个是某一个类的<em>友元</em>的全局函数怎么访问这个类里的函数和变量?
C++ 关于友元的问题
我写的C++程序,总是过不去编译,请大哥大姐多多指教rn#includernusing namespace std;rnrnrnclass Date;rnclass Time;rnrnvoid display(Time &,Date &);//<em>友元</em>函数rnrnclass Timern rn public:rn Time(int,int,int);rn rn friend void display(Time&,Date &); //<em>友元</em>函数Time中声明 rn private:rn int hour;rn int minute;rn int sec;rn rn;rn rnclass Daternrn public:rn Date(int,int,int);rn friend void display(Time &,Date &);// <em>友元</em>函数在Date中声明 rn private:rn int month;rn int day;rn int year; rn;rnrnTime::Time(int h,int m,int s)rnrn rn hour=h;rn minute=m;rn sec=s;rnrn/*rnvoid Time::display(Date &d)rnrn cout<
关于C++友元与前置声明
在使用C++进行项目开发的过程中难免会使用<em>友元</em>及前置声明 下面就对它们进行讲解: 在此之前,先来了解下什么是<em>友元</em>函数?什么是<em>友元</em>类?什么是<em>友元</em>成员函数?为什么需要<em>友元</em>? <em>友元</em>函数是指某些虽然不是类成员的函数却能够访问类的所有成员。<em>友元</em>类同理,只是<em>友元</em>类与<em>友元</em>函数最主要的区别是:一个是将某个函数作为类的<em>友元</em>,一个则是将整个类(所有成员函数)都作为其他类的<em>友元</em>。而<em>友元</em>成员函数顾名思义就是将某个类的某个成员函数作为其他类的<em>友元</em>。一般情况下,非成员函数是无法直接从外部访问类的私有或保护部分的,但是在有些开发中又需要
关于模板的友元
#include rnusing namespace std;rnrntemplaternclass Arn //如何在类外定义非模板<em>友元</em>函数 display ,要求能访问类 A 的任意实例 rn friend void display(const A &a) cout< a(5);rn display(a);rn cout<
关于typedef和友元的前向声明
以下是c++ prime (第四版)中397页的<em>友元</em>和typedef的例子rnrn#include rnclass Screen;rnclass Window_Mgr;rnusing std::string;rnusing namespace std;rntypedef std::string::size_type Screen::index;rnclass Window_Mgrrnrn public :rn void relocate(Screen::index t )/*报错 ,没有定义Screen::index,而如果把Screen定义放到之前,Screen里面的<em>友元</em>定义又有问题*/rn rn rn;rnclass Screenrnrn public :rn typedef std::string::size_type index;rn friend void Window_Mgr::relocate(Screen::index t);//Window_Mgr必须在之前定义rn rn private:rn std::string contents;rn index cursor;rn index height,width;rn;rnrnint main()rnrn return 0;rnrnrn//在这里,如果把Screen的定义放到Window_Mgr前面,又不符合<em>友元</em>的声明顺序,不知道怎么解开这个锁
关于友元的疑惑
为什么有的时候我在类里定义了<em>友元</em>的操作符,但是编译的时候说无法访问私有变量呢?
关于c++友元.ppt
主要讲解c++种的<em>友元</em>类<em>友元</em>函数 可以更好地学习其中的内容 <em>友元</em>在类中担任着十分关键的角色 所以更应该认真学习
关于友元的问题??
#include rnusing namespace std;rnrnrnclass Rational rnrnpublic:rn Rational(int numerator = 0, int denominator = 1)rn rn n=numerator;rn d=denominator;rn rnfriend ostream& operator<<<< r.n << '/' << r.d;rn return s;rnrnrnvoid main()rn rn rnrnrnrnrn以上程序编译出错rn--------------------Configuration: test - Win32 Debug--------------------rnCompiling...rntest.cpprnE:\c++study\test\test.cpp(23) : error C2248: 'n' : cannot access private member declared in class 'Rational'rn E:\c++study\test\test.cpp(17) : see declaration of 'n'rnE:\c++study\test\test.cpp(23) : error C2248: 'd' : cannot access private member declared in class 'Rational'rn E:\c++study\test\test.cpp(17) : see declaration of 'd'rnError executing cl.exe.rnrntest.exe - 2 error(s), 0 warning(s)rnrnrn<em>友元</em>不是可以直接访问类私有变量吗?rn如果我把头文件改成如下就编译则没有问题,奇怪中!!!!rn#include rnrnrnrnrn那位给在下解释一下,不胜感激rn
关于友元模板
#include rnusing namespace std;rnrntemplate rnclass Arnrn public:rn friend void fun();rn;rnrntemplate rnvoid fun()rnrn cout << "Why?" << endl;rnrnrnint main()rnrn A a;rn fun();rn return 0;rnrn这段代码在g++ 4.4下无法编译通过rn错误信息如下:rn8: error: variable or field ‘fun’ declared voidrn8: error: expected ‘;’ before ‘<’ tokenrn这时为什么?求解rn
关于友元函数用法出错
[code=c]rnclass Fractionrnrnpublic:rn Fraction(int t, int b);rn const Fraction operator+(const Fraction&);rn const Fraction operator-(const Fraction&);rn const Fraction operator*(const Fraction&);rn const Fraction operator/(const Fraction&);rn friend iFraction& convertF(Fraction&)rnprotected:rn int top, bottom;rn;rnrnclass iFraction : public Fractionrnrnpublic:rn iFraction(int, int, int);rn const iFraction operator+(const iFraction&);rn const iFraction operator-(const iFraction&);rn const iFraction operator*(const iFraction&);rn const iFraction operator/(const iFraction&);rnprivate:rn int integer, top, bottom;rn;rn[/code]rn大家帮我看看,我的第一个类的<em>友元</em>函数总是提示出错,提示:不允许在数据声明中使用“friend”rn我想做的就是写一个函数convertF,返回值是iFraction(Fraction类的子类),参数是Fraction类引用,但是总是出错……所以不知道该咋办了……
请问关于友元操作符<
代码如下:rnrnclass Timernrnfriend void operator <<<<
关于友元函数声明问题
在看C++ Templates时产生了一个疑问rn[code=C/C++]rntemplaternvoid multiply(T a)rnrnrnrnrnclass Testrnrnpublic:rn friend void multiply(Test &a);rn;rnrnrnTest a;rnmultiply(a); // 产生链接错误rn[/code]rn对于上面代码的错误,书上说,如果Test中的multiply不是受限的,那么该名称一定不是引用一个模板实例rnrn为什么?rn是不是因为没有“::”或尖括号限制时,默认将multiply当成普通函数,而非模板,而又因为模板的等级低,于是才出现上述情况?
友元
<em>友元</em>函数 如果类外有函数经常访问类中的私有成员(通过Get或Set方法),那么可以将其申明为类的<em>友元</em>函数,允许访问类的私有成员(但是也有弊端:破坏了类的封装特性,使得外部函数可以访问私有成员)。如: class Point { public: friend int CalculateArea(Point&amp;amp; p1, Point&amp;amp; p2); //申明此函数为<em>友元</em>函数,此函数在...
关于友元的一个问题
我定义两个抽象基类,let's say class BaseA, class BaseB, BaseA里申明了BaseB是他的<em>友元</em>,现在我分别用两个实现类实现这两个抽象基类,rnclass ConcreteA : public BaseA, class ConcreteB : public BaseB.rn问题:在具体类ConcreteA里需要申明ConcreteB是他的<em>友元</em>吗?rnrn我认为没有必要,但是申明了也不错,大家怎么看的?
关于静态成员及友元的实验
老师给了一个实验题目rn1、实验目的·学习<em>友元</em>函数的定义和原理。·学习静态数据成员和静态成员函数的使用。·学习静态成员代替全局变量实现对象间的共享。rn 2、实验内容rn(1)有如下类的定义。类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。rn #include rn class Myclass rn public:rn Myclass (int a,int b) x=a;y=b;rn void copy(Myclass & my);rn void print( )rn cout<<
关于模板与友元
小弟初学,大大们指导~rnrn// 程序1 没有问题rntemplate< class Type >rnclass Tplrnrn template< class T > rn friend ostream& operator<< class T > rnostream& operator<< class Type >rnclass Tplrnrn // template< class T > rn friend ostream& operator<<<< (std::ostream&, const Queue&);rn // ??为啥还要加个 ??rn;rntemplate class Queue rn // needs access to headrn friend std::ostream&rn operator<< (std::ostream&, const Queue&);rn;
关于模板类友元的错误
我想定义一个模板类为另外一个模板类的<em>友元</em>,不知道为什么错了。对照书本说明, 好像也没有错啊。rnExercise16.12.h:rn[code=c]#pragma oncern#include rn#include rn#include rn#include rnusing std::vector;rnusing std::shared_ptr;rnusing std::string;rnusing std::initializer_list;rnusing std::make_shared;rnusing std::weak_ptr;rnrntemplate class BlobPtr; // <em>友元</em>的前向声明rnrntemplate rnclass Blob rnrn friend class BlobPtr; // 声明为Blob的<em>友元</em>类, 一对一的关系rnpublic:rn using value_type = T;rn using size_type = typename vector::size_type;rn //! constructorrn Blob() : data(make_shared>()) rn Blob(initializer_list il) : data(make_shared>(il)) rn //! add elementrn void push_back(const T& rhs);rn void push_back(T&& rhs);rn //! remove the tail elementrn void pop_back();rn //! get sizern size_type size() const;rn //! emptyrn bool empty() const;rnrn //! element accessrn const T& back() const;rn T& back();rn const T& operator[](size_type index) const;rn T& operator[](size_type index);rnprivate:rn shared_ptr> data;rn void check(size_type index, const string& msg) const;rn;rnrntemplate rnclass BlobPtr rnrn //! constructorrn BlobPtr() : wptr(nullptr), curr(0) rn // 这里使用Blob中的私有变量rn BlobPtr(Blob& blob, size_t i = 0) : wptr(blob.data), curr(i) rnprivate:rn weak_ptr> wptr;rn size_t curr;rn shared_ptr> check(size_t index, const string& msg) const;rn;rnrntemplate rnconst T& Blob::operator[](size_type index) constrnrn check(index, "out of range");rn return (*data)[index];rnrnrntemplate rnT& Blob::operator[](size_type index) rnrn check(index, "out of range");rn return (*data)[index];rnrnrntemplate rnvoid Blob::check(size_type index, const string& msg) constrnrn if (data->size() back();rnrnrntemplate rnT& Blob::back() rnrn check(0, "out of range");rn return data->back();rnrnrntemplate rnvoid Blob::push_back(const T& rhs) rnrn data->push_back();rnrnrntemplate rnvoid Blob::push_back(T&& rhs) rnrn data->push_back(std::move(rhs));rnrnrntemplate rntypename Blob::size_type Blob::size() constrnrn return data->size();rnrnrntemplate rnvoid Blob::pop_back() rnrn data->pop_back();rnrnrntemplate rnbool Blob::empty() constrnrn return data->empty();rnrnrntemplate rnshared_ptr> BlobPtr::check(size_t index, const string& msg) constrnrn auto ret = wptr.lock();rn if (!ret) throw runtime_error("unbound Blob object");rn if (index >= ret->size()) throw out_of_range(msg);rn return ret; rn[/code]rn上面中文字体旁边声明<em>友元</em>,<em>友元</em>类中使用Blob的私有变量。下面使用时错误rnExercise16.12.cpp:rn[code=c]#include "Exercise16.12.h"rn#include rnusing std::cout;rnusing std::cin;rnusing std::endl;rnrnint main(int argc, char ** argv) rnrn Blob iBlob = 1, 2, 3, 4, 5, 6;rn cout << iBlob[2] << endl;rn iBlob[2] = 5;rn cout << "iBlob.size() : " << iBlob.size() << endl;rn cout << "iBlob.back() : " << iBlob.back() << endl;rn iBlob.push_back(7);rn cout << "iBlob.size() : " << iBlob.size() << endl;rn cout << "iBlob.back() : " << iBlob.back() << endl;rn iBlob.pop_back();rn cout << "iBlob.size() : " << iBlob.size() << endl;rn cout << "iBlob.back() : " << iBlob.back() << endl;rn cout << "iBlob.empty() : " << iBlob.empty() << endl;rnrn BlobPtr pBlob(iBlob); // 这一行为什么错呢,我已经声明BlobPtr为Blob的<em>友元</em>了啊rnrn return 0;rn[/code]rn错误:rn[quote]Severity Code Description Project File Line Suppression StaternError (active) "BlobPtr::BlobPtr(Blob &blob, size_t i = 0U) [with T=int]" (declared at line 51 of "c:\Users\smartOne\Cpp\ExercisesSection16.1.2\Exercise16.12\Exercise16.12.h") is inaccessible Exercise16.1.2 c:\Users\smartOne\Cpp\ExercisesSection16.1.2\Exercise16.12\Exercise16.12.cpp 22 rnError C2248 'BlobPtr::BlobPtr': cannot access private member declared in class 'BlobPtr' Exercise16.1.2 c:\users\smartone\cpp\exercisessection16.1.2\exercise16.12\exercise16.12.cpp 22 rn[/quote]
友元
想来想去不小得何将下面的leisure改为<em>友元</em>!哪个帮下忙嘛!rn#includernusing namespace std;rnclass carrn int size;rnpublic:rn void setsize (int j)size=j;rn int getsize()return size;rn ;rnclass boatrn int size;rnpublic:rn void setsize(int j)size=j;rn int getsize()return size;rn ;rnint leisure(int time,car& aobj,boat& bobj)rn return time* aobj.getsize()*bobj.getsize();rnrnint main()rn car c1;rn c1.setsize(2);rn boat b1;rn b1.setsize(3);rn std::cout<
关于友元的问题,
书上没有给出<em>友元</em>函数和<em>友元</em>类的通用格式,大家能帮我写一下通式吗?rn例:rnclass Timernrn public:rn ******rn friend void Time12(Time time)rn private:rn;rn对这一句:friend void Time12(Time time)rn圆括号里面的应该这样理解:rn第一个Time是类名,time而是自定义的一个变量,就表示为time这个变量的类型为Time这个类?
关于 友元 请求帮助
15。3/rnrn重新编写下述程序使函数LEISURE()在为类CAR物类BOAT的函数作为重新编程在类CAR和数BOAT中增加函数GET()。。rn# includernclass boat;rnclass carrn public:rncar (int j)size=j;rnfriend int leisure(int time,car&aobj, boat&bobj);rnprotected:rnint size;rn;rnclass boat rn public;rnboat(int j) size=j;rnfriend int leisure(int time,car&aobj, boat&bobj);rnprotected:rnint size;rn;rnint leisure(int time,car&aobj,boat&bobj)rnreturn time*aobj.size*bobj.size;rnvoid main()rncar c1(2);rnboat b1(3);rnint time=4;rncout<< leisure(time,c1,b1);rnrnrnrn谢谢。。。。。。
关于友元的莫名其妙错误
#ifndef vect_hrn#define vect_hrn#include rnusing namespace std;rnclass vectrnrnprivate:rn double _x,_y;rnpublic:rn vect(double x,double y):_x(0),_y(0)rn rn _x=x;rn _y=y;rn rn vect& operator-()rn rn _x=-_x;rn _y=-_y;rn return *this;rn rn vect& operator+ (vect& h)rn rn _x=h._x+_x;rn _y=h._y+_y;rn return *this;rn rn double getx()rn rn return _x;rn rn double gety()rn rn return _y;rn rn friend ostream& operator<<<
关于运算符重载友元的问题....
我刚学C++的,学习中遇到个问题.rn#includernusing namespace std;rnclass listrnrnpublic:rn list()a=0;b=0;rn void endow();rn void display();rn friend list operator + (list &x,list &y);//这里的<em>重载</em>函数为什么必须声明是<em>友元</em>?rn int a;rn int b;rn; rn rnvoid list::display()rnrn cout<
在myeclipse自动提示spring的配置信息下载
在myeclipse自动提示spring的配置信息 相关下载链接:[url=//download.csdn.net/download/fqqgb/2272932?utm_source=bbsseo]//download.csdn.net/download/fqqgb/2272932?utm_source=bbsseo[/url]
Scientific Calculator下载
本程序实际上是一款表达式计算器软件,它可以对用户输入的算数表达式进行解读并输出计算结果。该软件突破了传统计算器的限制,除了支持基本的四则运算功能外,还支持无限制的括号嵌套运算,负数运算,各种常用函数运算,常数和特殊符号等。操作说明: 本程序界面从上到下分四部分组成: 第一部分:计算器主界面 第二部分:数字按钮界面 第三部分:常用函数界面 第四部分:运算符界面 菜单上下方向键用于在表达式区和小数位设置区之间切换。当小数设置区获得焦点时,左右方向键用于更改小数位数(范围从0到8)。菜单用于输入运算符或函数等。 而且,本程序支持弹出菜单。 相关下载链接:[url=//download.csdn.net/download/codyit/2722454?utm_source=bbsseo]//download.csdn.net/download/codyit/2722454?utm_source=bbsseo[/url]
NERO APE插件nxMyAPE.dll 1.0.0.26下载
Nero实际上并不支持APE及FLAC无损压缩文件格式,即Nero默认安装是不支持直接把APE刻录成音频CD的,需要另外下载Nero的APE插件,即可将APE直接刻录成音乐CD。 nxMyAPE.dll 1.0.0.26 相关下载链接:[url=//download.csdn.net/download/aaliwen/3360922?utm_source=bbsseo]//download.csdn.net/download/aaliwen/3360922?utm_source=bbsseo[/url]
我们是很有底线的