我不确定如何使用接收类对象作为参数的函数。有帮助吗?以下是一个例子。
#include<iostream>
void function(class object); //prototype
void function(class tempObject)
{
//do something with object
//use or change member variables
}
基本上我对如何创建一个将接收类对象作为参数的函数,然后在函数内使用这些参数(如tempObject.variable
)感到困惑。
很抱歉,如果这有点令人困惑,我对C ++相对较新。
答案 0 :(得分:35)
class
是一个仅用于*来引入类定义的关键字。当您将新类实例声明为本地对象或函数参数时,您只使用类的名称(必须在范围内)而不是关键字class
本身。
e.g。
class ANewType
{
// ... details
};
这定义了一个名为ANewType
的新类型,它是一种类类型。
然后,您可以在函数声明中使用它:
void function(ANewType object);
然后,您可以将类型为ANewType
的对象传递到函数中。该对象将复制到函数参数中,因此,与基本类型非常相似,任何修改参数的尝试都只会修改函数中的参数,并且不会影响最初传入的对象。
如果要根据函数体中的注释修改函数外部的对象,则需要通过引用(或指针)获取对象。 E.g。
void function(ANewType& object); // object passed by reference
这种语法意味着函数体中object
的任何使用都是指传递给函数而不是副本的实际对象。所有修改都将修改此对象,并在函数完成后可见。
[* class
关键字也用于模板定义,但这是一个不同的主题。]
答案 1 :(得分:11)
最简单的方法:
#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 );
}
当然,您应该使用引用来传递对象,但我怀疑您还没有使用它们。
答案 2 :(得分:6)
如果要传递类实例(对象),请使用
void function(const MyClass& object){
// do something with object
}
或
void process(MyClass& object_to_be_changed){
// change member variables
}
另一方面,如果你想&#34;通过&#34; 类本身
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;
答案 3 :(得分:0)
我也在问同样的问题。另一个解决方案是您可以重载方法:
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;
...
};
答案 4 :(得分:-1)
神圣错误下面代码的原因是为了说明如何不对主要的每个函数进行void而不是键入return;对于功能......而是将所有东西都推入沉积物中,这是打印功能的原型......如果你需要使用有用的功能......你将不得不...... (ps下面是针对那些被这些对象和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";
任何人都可以告诉我为什么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;
}