C++ 如何在C++;作为函数参数

C++ 如何在C++;作为函数参数,c++,parameters,C++,Parameters,我不知道如何让函数接收类对象作为参数。有什么帮助吗?下面是一个例子 #include<iostream> void function(class object); //prototype void function(class tempObject) { //do something with object //use or change member variables } #包括 空函数(类对象)//原型 void函数(类tempObject) { //用物体做

我不知道如何让函数接收类对象作为参数。有什么帮助吗?下面是一个例子

#include<iostream>

void function(class object); //prototype

void function(class tempObject)
{
   //do something with object
   //use or change member variables
}
#包括
空函数(类对象)//原型
void函数(类tempObject)
{
//用物体做某事
//使用或更改成员变量
}
基本上,我只是对如何创建一个函数来接收一个类对象作为其参数感到困惑,然后在函数中使用这些参数,例如
tempObject.variable

对不起,如果这是一种混乱,我对C++是比较新的。

最简单的是:

#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 );
}
#包括
使用名称空间std;
甲级{
公众:
A(intx):n(x){}

void print(){cout
class
是一个仅用于*引入类定义的关键字。当您将新类实例声明为本地对象或函数参数时,只使用类的名称(必须在范围内),而不使用关键字
class
本身

e、 g

这定义了一个名为
ANewType
的新类型,它是类类型

然后,您可以在函数声明中使用它:

void function(ANewType object);
然后,您可以将类型为
ANewType
的对象传递到函数中。该对象将被复制到函数参数中,因此,与基本类型一样,任何修改参数的尝试都只会修改函数中的参数,不会影响最初传入的对象

如果您想修改函数体中注释所指示的函数外部的对象,则需要通过引用(或指针)获取该对象

此语法表示在函数体中使用的
对象
指的是传递到函数中的实际对象,而不是副本。所有修改都将修改此对象,并在函数完成后可见

[*模板定义中也使用了
class
关键字,但这是另一个主题。]

如果要传递类实例(对象),可以使用

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

另一方面,如果您想“通过”类本身


下面代码的原因是为了说明如何不使main每个函数无效,也不键入return;对于函数……而是将所有内容都推到沉积物中,这是打印函数原型……如果需要使用有用的函数……您必须在下面。。。。。 (注意,下面这是为那些被这些对象和T模板弄得不知所措的人准备的,这些模板允许不同的变量声明类型(如float和char)在用户定义的函数中使用相同的传递值)

可以告诉我为什么C++一次一个地把数组变成一个值,消除空间和标点的唯一方法是使用字符串标记。当我试图删除回文空间时,我无法解决这个问题…

#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;

}
#包括
#包括
使用名称空间std;
整数(浮动);;
int getaverage(float[],float);
整数计算器(float[],float,float,float[]);
int打印结果(float[],float,float,float[]);
int main()
{
int i;
浮点最大值=3,大小;
浮动字母等级[5],数字等级[100],平均值;
尺寸=getgrades(数值等级);
平均值=getaverage(数值等级、大小);
打印结果(数字等级、大小、平均值、字母等级);
返回0;
}
int getgrades(浮点a[])
{ 
int i,最大值=3;

对于(i=0;i我也提出了同样的要求。另一个解决方案是您可能会使您的方法过载:

void remove_id(EmployeeClass);
void remove_id(ProductClass);
void remove_id(DepartmentClass);
在调用中,参数将相应地适合您传递的对象,但随后您必须重复自己的操作

void remove_id(EmployeeClass _obj) {
    int saveId = _obj->id;
    ...
};

void remove_id(ProductClass _obj) {
    int saveId = _obj->id;
    ...
};

void remove_id(DepartmentClass _obj) {
    int saveId = _obj->id;
    ...
};

PASS by REF是C++的一个必要的怪癖,即使用户还不理解,它也需要提前介绍。特别是,OP想修改类成员。如果他不理解如何调用简单函数调用,我认为引入引用是个坏主意。如果他想改变课堂内容,他也会。需要了解private&public和constness。创建对象时必须传递一些值,例如A(4)中的值;例如,在第3行中,从下往下传递。尽管如此,class关键字在他使用时并不是非法的。下面是一个完全有效的TU:
void f(class foo);
。如果“foo”还不知道,它将被引入,所以它是一个在一个不寻常的地方的前声明。@利特:100%正确,但可能更困惑,比初学者帮助。我有一些经验与C++,但我会做一个双或三次采取,如果我遇到<代码>空隙F(类FO)非常感谢!我是一个C++程序员,但这个话题很有趣,在一个维基百科上的例子中,我看到了:空插入(节点*&根,int数据),它意味着什么?把一个指向一个对象的节点类型的指针传递给它。事实上,相同的声明?如果有区别,两者之间有什么区别?@Adrian请不要发明新的标记-现有的标记太多了。欢迎使用堆栈溢出!虽然此代码可能有助于解决问题,但它没有解释为什么和/或如何回答问题。提供此附加上下文将大大提高效率证明其长期教育价值。请在回答中添加解释,包括适用的限制和假设。
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;
char arr[ ] = "This is a test";

string str(arr);


//  You can also assign directly to a string.
str = "This is another string";
#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;

}
void remove_id(EmployeeClass);
void remove_id(ProductClass);
void remove_id(DepartmentClass);
void remove_id(EmployeeClass _obj) {
    int saveId = _obj->id;
    ...
};

void remove_id(ProductClass _obj) {
    int saveId = _obj->id;
    ...
};

void remove_id(DepartmentClass _obj) {
    int saveId = _obj->id;
    ...
};