在课堂上使用返回值

时间:2012-10-19 09:14:58

标签: c++ class

头文件

#ifndef deneme_h
#define deneme_h

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std ;
class A
{
public:
Course ( int code ) ;
int getACode () ;


 private:

    int code   ;

};


class B
{

  public:
    B ( A * a  = NULL) ;
        A     * getA     () ;

 private:

    A     * a   ;
  friend ostream & operator<< ( ostream & out , B & b ) ;
};

#endif

A.cpp

#include "deneme.h"
using namespace std ;


A :: A ( int code )
{
    this -> code = code;
} 

int A :: getACode()
{
    return this -> code;
}

B.cpp

#include "deneme.h"

using namespace std ;

B::B ( A     * a ) 
    {
        this -> a = new A(223);
        this -> a = a;

    }
A * A::getA     ()  {   return this -> a;}



ostream & operator<< ( ostream & out , B & b ) { out << b.course->getACode();}

和main.cpp

#include "deneme.h"
using namespace std;

int main(){

Course* c1 = new Course(223) ;

Offering* o1_1 = new  Offering(c1);

cout<< *o1_1;

return 0;
}

大家好

我想问一下这段代码。上面的代码工作正常,它打印223.但是当我更改B.cpp中的运算符重载部分

 ostream & operator<< ( ostream & out , Offering & offering ) { out << offering.(getCourse() )->getCourseCode();}

我收到错误。为什么会出错?我不能使用返回值。谢谢你的回答。

3 个答案:

答案 0 :(得分:2)

如前所述,你需要退出,我想你想要的是:

ostream & operator<< ( ostream & out , Offering & offering ) { out << ( offering.getCourse() )->getCourseCode(); return out; }

(我移动了一个括号)

答案 1 :(得分:1)

删除getCourse()

周围的括号

答案 2 :(得分:0)

与iostream一起使用时:

operator<<应该通过const引用获取其第二个参数(如果这是微不足道的话,则为值)。

它应该返回它的第一个参数。

所以

ostream & operator<< ( ostream & out , const B & b ) 
{ 
     return out << b.course->getACode();
} 

ostream & operator<< ( ostream & out , const Offering & offering ) 
{ 
    return out << offering.getCourse()->getCourseCode();
} 

在这两种情况下,您也可以将return out作为单独的语句放在另一个语句之后。

另请注意,在C ++中,您不必使用new创建所有对象。