将范围从成员更改为全局功能

Changing scope from member to global function

本文关键字:全局 功能 范围 成员      更新时间:2023-10-16

我正在尝试将打印功能从成员更改为全局函数而不修改主函数。但是,我无法在不修改主函数的情况下进行编译。

class Student
{
char* name; 
long ssn; 
     public:
     Student (char*, long);
     //void print();
     char * getName ( );
     long getSsn ( );
};
Student::Student(char* temp_name, long temp_ssn)
{
    name = new char[strlen(temp_name) +1];
    strcpy(name,temp_name);
    ssn = temp_ssn;
}
char * Student::getName()
{
    return name;
}
long Student::getSsn()
{
    return ssn;
}
void print()
{
    cout << "Name: " << getName() << endl;
    cout << "SSN: " << getSsn() << endl;
}
int main ( ) 
{
    Student S1("Mike", 222222222L);
    S1.print();
    return 0; 
}

特别是我想知道是否有必要包括void print();在公共场合:学生班的部分?还是会成为成员函数?

实际上可以在不修改主函数的情况下执行此操作?

如何从全局函数访问类?我要疯了吗?谢谢大家。

这是使print成为全局函数的方法。

class Student
{
char* name; 
long ssn; 
     public:
     Student (char*, long);
     char * getName ( );
     long getSsn ( );
};
Student::Student(char* temp_name, long temp_ssn)
{
    name = new char[strlen(temp_name) +1];
    strcpy(name,temp_name);
    ssn = temp_ssn;
}
char * Student::getName()
{
    return name;
}
long Student::getSsn()
{
    return ssn;
}
void print(Student& s)
{
    cout << "Name: " << s.getName() << endl;
    cout << "SSN: " << s.getSsn() << endl;
}
int main ( ) 
{
    Student S1("Mike", 222222222L);
    print(S1);
    return 0; 
}

请注意,我已经在print中添加了Student&参数,它必须知道要打印哪个学生。在main中,我已经更改了print的方式,因此它具有Student参数,而不是在Student上调用方法。

我确定练习的重点是表明您可以使用全局功能或成员功能实现相同的效果。