2016-10-14 7 views
-2

Может ли функция-член в классе иметь тип возвращаемого значения другого класса?Функции-члены в классах

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

Это разрешено?

+1

Почему бы вам не попробовать? (Но да, это разрешено) – UnholySheep

+0

Забудьте класс, вы даже можете вернуть имя. :) –

+0

@SauravSahu: Э? –

ответ

0

Да, если компилятор знает о B перед вашей декларацией для func. Либо переместите определение для class B {}; выше class A, либо вперед объявите B, написав class B; до class A.

1

Да, вы можете вернуть любой допустимый тип, и если этот тип допускает, что нет никаких дополнительных ограничений на то, что функция-член может вернуть vs регулярной функции.

Хотя в вашем примере кода func() не может вернуть объект типа B, как он еще не определен. Вы должны были бы двигаться class B определения, прежде чем class A или использовать вперед декларацию, а затем объявить только (не определен) A::func там, а затем вы можете определить (реализовать) только после class B определения:

class B; 

class A { 
public: 
    B func(int x); // declared 
    B func2() { return B{}; } // this would not compile with forward declaration of B 
}; 

class B { 
}; 

// this definition must see class B defined, not forward declared 
B A::func(int x) 
{ 
    return B{}; 
} 

Дополнительных подробностей о прямом объявлении можно найти here

0

Да, это разрешено до тех пор, пока вы кладете классы в порядок. В настоящее время ваш пример не работает. Это:

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

Вам необходимо либо поставить класс B Перед тем, как, например:

class B 
{ 
}; 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

Или вперед объявить:

class B; //Forward Declaration. 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

В противном случае, ваш код должен работать.

Смежные вопросы