Как использовать объект класса в С++ в качестве параметра функции

Я не уверен, как иметь функцию, которая получает объект класса в качестве параметра. Любая помощь? Ниже приведен пример.

#include<iostream>

void function(class object); //prototype

void function(class tempObject)
{
   //do something with object
   //use or change member variables
}

В основном я просто запутался в том, как создать функцию, которая получит объект класса в качестве ее параметров, а затем использовать эти параметры внутри функции, такие как tempObject.variable.

Извините, если это немного запутанно, я относительно новичок в С++.

Ответ 1

class - это ключевое слово, которое используется только для введения определений классов. Когда вы объявляете новые экземпляры класса либо локальными объектами, либо как параметры функции, вы используете только имя класса (которое должно быть в области), а не только ключевое слово class.

например.

class ANewType
{
    // ... details
};

Это определяет новый тип, называемый ANewType, который является типом класса.

Затем вы можете использовать это в объявлениях функций:

void function(ANewType object);

Затем вы можете передать объекты типа ANewType в функцию. Объект будет скопирован в параметр функции, поэтому, подобно базовым типам, любая попытка изменить параметр будет изменять только параметр в функции и не будет влиять на объект, который был первоначально передан.

Если вы хотите изменить объект вне функции, как указано комментариями в теле функции, вам нужно будет взять объект по ссылке (или указателю). Например.

void function(ANewType& object); // object passed by reference

Этот синтаксис означает, что любое использование object в теле функции относится к фактическому объекту, который был передан в функцию, а не к копии. Все изменения изменят этот объект и будут видны после завершения функции.

[* Ключевое слово class также используется в определениях шаблонов, но это другой объект.]

Ответ 2

В самом простейшем:

#include <iostream>
using namespace std;

class A {
   public:
     A( int x ) : n( x ){}
     void print() { cout << n << endl; }
   private:
     int n;
};

void func( A p ) {
   p.print();
}

int main () {
   A a;
   func ( a );
}

Конечно, вы, вероятно, должны использовать ссылки для передачи объекта, но я подозреваю, что вы еще не добрались до них.

Ответ 3

Если вы хотите передать экземпляры класса (объекты), вы либо используете

 void function(const MyClass& object){
   // do something with object  
 }

или

 void process(MyClass& object_to_be_changed){
   // change member variables  
 }

С другой стороны, если вы хотите "передать" сам класс

template<class AnyClass>
void function_taking_class(){
   // use static functions of AnyClass
   AnyClass::count_instances();
   // or create an object of AnyClass and use it
   AnyClass object;
   object.member = value;
}
// call it as 
function_taking_class<MyClass>();
// or 
function_taking_class<MyStruct>();

с

class MyClass{
  int member;
  //...
};
MyClass object1;

Ответ 4

священные ошибки. Причина приведенного ниже кода заключается в том, чтобы показать, как не void main каждую функцию, а не вводить return; для функций...... вместо этого вставляем все в осадок, для которого используется прототип функции печати... если вам нужно использовать полезные функции... вам придется ниже..... (p.s. это ниже для людей, перегруженных этими объектами и шаблонами T, которые позволяют использовать различные типы объявлений переменных (например, float и char) для использования того же переданного значения в пользовательской функции)

char arr[ ] = "This is a test";

string str(arr);


//  You can also assign directly to a string.
str = "This is another string";

может ли кто-нибудь сказать мне, почему С++ сделал массивы в pass по значению по одному за раз, и единственный способ устранить пробелы и пунктуацию - это использование токенов. Я не мог обойти проблему, когда пытался удалить пробелы для палиндрома...

#include <iostream>
#include <iomanip>
using namespace std;
int getgrades(float[]);
int getaverage(float[], float);
int calculateletters(float[], float, float, float[]);
int printResults(float[], float, float, float[]);


int main()
{

int i;
float  maxSize=3, size;
float  lettergrades[5], numericgrades[100], average;

size=getgrades(numericgrades);
average = getaverage(numericgrades, size);
printResults(numericgrades, size, average, lettergrades);
return 0;
}

int getgrades(float a[])
{ 


int i, max=3;

for (i = 0; i <max; i++)
{
    //ask use for input
    cout << "\nPlease Enter grade " << i+1 << " : ";
    cin >> a[i];
    //makes sure that user enters a vlue between 0 and 100

   if(a[i] < 0 || a[i] >100)
    {
        cout << "Wrong input. Please
 enter a value between 0 and 100 only." << endl;
        cout << "\nPlease Reenter grade " << i+1 << " : ";
        cin >> a[i];

        return i;
    }
}
}

int getaverage(float a[], float n) 
{ 
int i;
float sum = 0;
 if (n == 0)
return 0;
for (i = 0; i < n; i++)
sum += a[i];
return sum / n;
}                               


int printResults(float a[], float n, float average, float letters[]) 
{
int i;
cout << "Index Number | input  |
array values address in memory " << endl;

for (i = 0; i < 3; i++)
{
cout <<"     "<< i<<" \t\t"<<setprecision(3)<<
a[i]<<"\t\t" << &a[i] << endl;
}
cout<<"The average of your grades is: "<<setprecision(3)<<average<<endl;

}