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(){coutclass
是一个仅用于*引入类定义的关键字。当您将新类实例声明为本地对象或函数参数时,只使用类的名称(必须在范围内),而不使用关键字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;
...
};