我不知道如何有一个接收类对象作为参数的函数.有帮助吗?以下是一个例子.
#include<iostream>
void function(class object); //prototype
void function(class tempObject)
{
//do something with object
//use or change member variables
}
Run Code Online (Sandbox Code Playgroud)
基本上我只是混淆了如何创建一个函数,它将接收一个类对象作为其参数,然后在函数内部使用这些参数,如tempObject.variable.
对不起,如果这有点令人困惑,我对C++比较陌生.
CB *_*ley 38
class是一个仅用于*来引入类定义的关键字.将新类实例声明为本地对象或函数参数时,只使用类的名称(必须在范围内)而不是关键字class本身.
例如
class ANewType
{
// ... details
};
Run Code Online (Sandbox Code Playgroud)
这定义了一个名为ANewTypeclass类型的新类型.
然后,您可以在函数声明中使用它:
void function(ANewType object);
Run Code Online (Sandbox Code Playgroud)
然后,您可以将类型的对象传递ANewType给函数.该对象将被复制到函数参数中,因此,与基本类型非常相似,任何修改参数的尝试都只会修改函数中的参数,并且不会影响最初传入的对象.
如果要根据函数体中的注释修改函数外部的对象,则需要通过引用(或指针)获取对象.例如
void function(ANewType& object); // object passed by reference
Run Code Online (Sandbox Code Playgroud)
这种语法意味着object函数体中的任何使用都是指传递给函数而不是副本的实际对象.所有修改都将修改此对象,并在函数完成后可见.
[*class关键字也用于模板定义,但这是一个不同的主题.]
小智 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 );
}
Run Code Online (Sandbox Code Playgroud)
当然,您可能应该使用引用来传递对象,但我怀疑您尚未使用它们.
如果要传递类实例(对象),请使用
void function(const MyClass& object){
// do something with object
}
Run Code Online (Sandbox Code Playgroud)
要么
void process(MyClass& object_to_be_changed){
// change member variables
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你想"传递"这个类本身
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>();
Run Code Online (Sandbox Code Playgroud)
同
class MyClass{
int member;
//...
};
MyClass object1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107752 次 |
| 最近记录: |