设计一个时间类,包含时分秒数据的初始化,并编写友元函数输出一个时间对象的值。 输入 输入一个时间的时分秒 输出 输出时间的时分秒
时间: 2024-05-04 07:16:48 浏览: 21
以下是一个简单的时间类的设计,包含时分秒数据的初始化,并编写友元函数输出一个时间对象的值:
```c++
#include <iostream>
using namespace std;
class Time {
private:
int hour, minute, second;
public:
Time(int h = 0, int m = 0, int s = 0) : hour(h), minute(m), second(s) {}
friend void printTime(Time t);
};
void printTime(Time t) {
cout << "Time is: " << t.hour << ":" << t.minute << ":" << t.second << endl;
}
int main() {
Time t(12, 34, 56);
printTime(t);
return 0;
}
```
可以看到,我们定义了一个叫做 Time 的类,其中包含了 hour、minute 和 second 三个私有成员变量,分别表示时间的时、分、秒。构造函数支持传入时、分、秒的参数进行初始化。我们还定义了一个友元函数 printTime,用于输出一个时间对象的值。在 main 函数中,我们创建了一个时间对象 t,并将其作为参数传入 printTime 函数中进行输出。
相关问题
用c++写一个学生类包含学号和成绩,同时设计一个计算平均成绩的友元函数,main函数里要包含输入输出
Sure, 我可以回答你的问题。这个学生类可以这么写:
```cpp
class Student {
public:
Student(int id, double grade) : id_(id), grade_(grade) {}
friend double CalcAvgGrade(const std::vector<Student>& students);
friend std::ostream& operator<<(std::ostream& os, const Student& s) {
os << "Student " << s.id_ << " grade: " << s.grade_;
return os;
}
private:
int id_;
double grade_;
};
double CalcAvgGrade(const std::vector<Student>& students) {
double sum = 0;
for (const auto& s : students) {
sum += s.grade_;
}
return sum / students.size();
}
```
在这个学生类里,我们定义了一个构造函数用来初始化学生的学号和成绩;同时定义了一个友元函数 `CalcAvgGrade` 用来计算学生的平均成绩。友元函数是在类外定义的函数,在这个例子里,我们将 `CalcAvgGrade` 声明为了友元函数,这样它就可以访问 `Student` 类的私有成员变量了。注意这里计算平均成绩的函数接受的参数是一个学生类对象的vector,这样我们就可以同时处理多个学生的成绩了。
然后我们在 main 函数里输入一些学生信息,然后调用友元函数 `CalcAvgGrade` 来计算平均成绩,再将结果输出到控制台上。
```cpp
int main() {
std::vector<Student> students {
{ 1, 80 },
{ 2, 90 },
{ 3, 85 },
};
double avg = CalcAvgGrade(students);
std::cout << "Average grade is: " << avg << std::endl;
return 0;
}
```
这里我们先构造了一个 `vector` 存放了一些学生信息,接着调用了 `CalcAvgGrade` 函数计算平均成绩,最后将结果输出到控制台上。运行这个程序的输出结果应该是:
```
Average grade is: 85
```
编写一个友元函数来读取矩阵指定所在行列的值
以下是一个简单的示例,展示了如何编写一个友元函数来读取矩阵指定所在行列的值:
```
#include<iostream>
using namespace std;
class Matrix;
class Element
{
int row;
int col;
public:
Element(int r = 0, int c = 0) : row(r), col(c) {}
friend int get_element(Matrix& m, Element e);
};
class Matrix
{
int **mat;
int rows, cols;
public:
Matrix(int r = 0, int c = 0) : rows(r), cols(c)
{
mat = new int*[rows];
for (int i = 0; i < rows; i++)
mat[i] = new int[cols];
}
void set_matrix()
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cin >> mat[i][j];
}
}
}
friend int get_element(Matrix& m, Element e);
};
int get_element(Matrix& m, Element e)
{
if (e.row >= m.rows || e.col >= m.cols)
{
cout << "Invalid index for matrix." << endl;
return -1;
}
return m.mat[e.row][e.col];
}
int main()
{
Matrix m(2, 2);
m.set_matrix();
Element e(1, 1);
cout << "Element at (" << e.row << "," << e.col << ") = " << get_element(m, e) << endl;
return 0;
}
```
在这个例子中,我们定义了两个类:Matrix 和 Element。Matrix 类表示矩阵,它拥有一个二维数组 mat 作为其数据成员。Element 类表示矩阵中的一个元素,它拥有两个整型数据成员 row 和 col,表示元素所在的行和列。
我们在 Element 类中声明了一个友元函数 get_element,该函数可以访问 Matrix 类的私有数据成员。在 Matrix 类中,我们也声明了 get_element 函数为友元函数。这样,get_element 函数就可以访问 Matrix 类的私有数据成员 mat 了。
在主函数中,我们首先创建了一个 2x2 的矩阵 m,并使用 set_matrix 函数来设置矩阵的值。然后,我们创建了一个 Element 对象 e,表示矩阵中的一个元素。最后,我们调用 get_element 函数来读取矩阵中指定行列位置的元素值,并输出结果。
请注意,这只是一个简单的示例,实际应用中可能需要添加更多的错误检查等功能。