4)重载功能:
➢ 要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,名
字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。
基于new bing部分指引作答:
要对 C++ 中的 ">>" 和 "<<" 运算符进行重载,您可以使用友元函数或成员函数来实现。在处理输入学生(教工)姓名时考虑到可能包含空格,可以先读取一行字符串,再将其作为参数传递给重载的运算符函数。
下面是一个示例代码,演示了如何重载 ">>" 运算符以满足输入带有空格的姓名:
#include <iostream>
#include <string>
class Person {
private:
std::string name;
public:
// 声明友元函数用于重载 ">>" 运算符
friend std::istream& operator>>(std::istream& input, Person& person);
// 输出姓名
void display() const {
std::cout << "Name: " << name << std::endl;
}
};
// 实现友元函数重载 ">>" 运算符
std::istream& operator>>(std::istream& input, Person& person) {
std::getline(input, person.name);
return input;
}
int main() {
Person person;
std::cout << "Enter a name: ";
std::cin >> person;
person.display();
return 0;
}
在上述示例中,Person 类包含一个私有成员变量 name,表示姓名。通过友元函数 operator>>
对 ">>" 运算符进行重载,使用 std::getline
从输入流中读取一行字符串,并将其赋值给 Person 对象的 name 成员变量。
在主函数中,我们首先提示用户输入一个姓名,然后使用重载的运算符 ">>" 来进行输入操作。最后调用 display 函数输出输入的姓名。
这样,您就可以通过重载 ">>" 运算符来满足输入带有空格的学生(教工)姓名的需求。请根据实际情况进行适当的调整和修改。
首先定义一个数组长度为5的指针数组对它进行赋值
char *name[5] = { "asd", "zxc", "qwe", "asdfg", "zxchj" };
可知name是一个指针数组,它的每一个元素是一个指针型的变量,其值为地址。
name是数组,那么它的每一个元素都应有相应的地址。
数组名name代表该指针数组首元素的地址,name+i是name[i]的地址
#include<stdio.h>
#include<windows.h>
void hanshu(char *name[5])
{
char *t;
int i, j;
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 5; j++)
{
if (strcmp(name[i], name[j]) == 1)
{
t = name[i];
name[i] = name[j];
name[j] = t;
}
}
}
}
void main()
{
int i;
char *name[5] = { "asd", "zxc", "qwe", "asdfg", "zxchj" };
hanshu(name);
for (i = 0; i < 5; i++)
printf("%s\n", name[i]);
system("pause");
}
输出结果
我们可以先在类的定义中定义重载<<和>>运算符的函数实现,同时通过友元函数的形式使用该函数输出/输入学生姓名。具体实现如下:
#include <iostream>
using namespace std;
class Student {
friend ostream& operator<<(ostream& os, const Student& s);
friend istream& operator>>(istream& is, Student& s);
private:
string name;
public:
// 构造函数和其它成员函数
Student(string n) : name(n) {}
// 重载<<和>>运算符
friend ostream& operator<<(ostream& os, const Student& s);
friend istream& operator>>(istream& os, Student& s);
};
ostream& operator<<(ostream& os, const Student& s) {
os << s.name;
return os;
}
istream& operator>>(istream& is, Student& s) {
is >> s.name;
return is;
}
int main() {
Student s("张三");
cout << "学生姓名为: " << s << endl; // 使用重载运算符输出
cout << "请输入学生姓名(中间允许空格): ";
cin >> s; // 使用重载运算符输入
cout << "学生姓名为: " << s << endl;
return 0;
}
需要注意的是,我们在定义重载<<和>>运算符的函数时,需要使用friend
关键字将其声明为友元函数,这样才能够在类外访问到类的私有成员name
。此外,对于存在空格的名字,我们可以直接使用输入流函数cin
的默认行为,即会自动忽略空格,并读取到下一个非空格字符。