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

时间:2019-02-16 21:11:17

标签: c++

我正在尝试将打印功能从成员更改为全局功能,而不修改主功能。但是,如果不修改main函数,就无法编译它。

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();。在公共场所:学生班的一部分?还是会使它成为成员函数?

实际上可以在不修改main函数的情况下做到这一点吗?

如何从全局函数访问该类?我会发疯吗?谢谢大家。

1 个答案:

答案 0 :(得分:0)

这是使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; 
}

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

我确定练习的重点是表明您可以使用全局函数或成员函数来达到相同的效果。