编写一个友元函数来读取矩阵指定所在行列的值。
时间: 2023-12-14 14:35:44 浏览: 56
假设矩阵的类名为 Matrix,代码如下:
```c++
class Matrix {
private:
int** data;
int rows;
int cols;
public:
Matrix(int r, int c) {
rows = r;
cols = c;
data = new int*[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
}
}
friend int readValue(const Matrix& m, int row, int col);
};
int readValue(const Matrix& m, int row, int col) {
return m.data[row][col];
}
```
这里定义了一个友元函数 `readValue`,它可以访问 Matrix 类的私有成员变量 `data`,并返回指定行列的值。在函数内部,使用 `m.data[row][col]` 来读取矩阵中指定位置的值。注意,函数必须在类的外部定义,并且需要声明为友元函数。
相关问题
编写一个友元函数来读取矩阵指定所在行列的值
以下是一个简单的示例,展示了如何编写一个友元函数来读取矩阵指定所在行列的值:
```
#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 函数来读取矩阵中指定行列位置的元素值,并输出结果。
请注意,这只是一个简单的示例,实际应用中可能需要添加更多的错误检查等功能。
(1)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如: c=a+b。 (2)编写一个友元函数来读取矩阵指定所在行列的值。 。(3)定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。
(1) 代码如下:
```c++
#include<iostream>
using namespace std;
class Matrix {
private:
int m[2][3];
public:
Matrix(int a[2][3]) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
m[i][j] = a[i][j];
}
Matrix operator+(const Matrix& n) const {
Matrix sum({0});
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
sum.m[i][j] = m[i][j] + n.m[i][j];
return sum;
}
friend int getElement(Matrix& n, int i, int j);
};
int getElement(Matrix& n, int i, int j) {
return n.m[i][j];
}
int main() {
int a[2][3] = { {1,2,3},{4,5,6} };
int b[2][3] = { {7,8,9},{10,11,12} };
Matrix m1(a), m2(b), m3({0});
m3 = m1 + m2;
cout << "The sum of two matrices is: " << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++)
cout << m3.getElement(m3, i, j) << " ";
cout << endl;
}
return 0;
}
```
(2) 友元函数的代码如下:
```c++
#include<iostream>
using namespace std;
class Matrix {
private:
int m[2][3];
public:
Matrix(int a[2][3]) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
m[i][j] = a[i][j];
}
Matrix operator+(const Matrix& n) const {
Matrix sum({0});
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
sum.m[i][j] = m[i][j] + n.m[i][j];
return sum;
}
friend int getElement(Matrix& n, int i, int j);
};
int getElement(Matrix& n, int i, int j) {
return n.m[i][j];
}
int main() {
int a[2][3] = { {1,2,3},{4,5,6} };
Matrix m1(a);
cout << "The element of matrix at row 1, column 2 is: " << getElement(m1, 1, 2) << endl;
return 0;
}
```
(3) 学生转教师的代码如下:
```c++
#include<iostream>
#include<string>
using namespace std;
class Student {
protected:
int num;
string name;
string sex;
public:
Student(int n, string na, string s) :num(n), name(na), sex(s) {}
void display() {
cout << "The information of student is: " << endl;
cout << num << " " << name << " " << sex << endl;
}
};
class Teacher :public Student {
private:
string course;
public:
Teacher(Student s, string c) :Student(s.num, s.name, s.sex), course(c) {}
void display() {
cout << "The information of teacher is: " << endl;
cout << num << " " << name << " " << sex << " " << course << endl;
}
};
int main() {
Student s(1001, "Tom", "Male");
Teacher t(s, "Math");
t.display();
return 0;
}
```
阅读全文