大虾指点c++代码
大虾指点c++代码
代码如下:
1 using namespace std
2 template <typename object>
3 class matrix
4 {
5 public:
6 matrix(int rows, int cols): array(rows)
7 {
8 for(int i=0; i <rows; i++)
9 array[i].resize(cols);
10 }
11 const vector <object> & operator[](int row) const
12 { return array[row]; }
13 vector <object> & operator[](int row)
14 { return array[row]; }
15
16 int numrows() const
17 {return array.size(); }
18 int numcols() const
19 {return numrows()? array[0].size() : 0;}
20 private:
21 vector <vector <object> > array;
22 };
上述代码写了一个矩阵模板,在模板里定义了const和非const的两种[]运算符,
代码大体上看得懂,现在求教几个细节:
(1)指点一下第6行代码中array(rows)的用法,编译器怎么执行这条语句?
(2)分别解释一下11行两个const的具体作用?
(3)分析一下21行语句的作用与合理性,最好能从编译器角度解释一下内存是怎么分配的?
[解决办法]
1.那是构造函数特有的初始化方式
[解决办法]
建议换C++ Primer来学C++,答案都在上面,还有充分说明。
[解决办法]
2.前面的const是指返回的是一个const类型的值,后面一个const是指该函数是const函数,不会改变类对象的成员
[解决办法]
3.vector <vector <object> > array;应该加个空格:vector <vector <object> > array;
这个容器中每个元素也是一个容器。
建议楼主按taodm说的办,看看书
[解决办法]
能够提问题很好,而且LZ提的问题也很好!!
不过有问题后第一选择我觉得应该是自己先尽量想办法解决,这个过程很重要.
[解决办法]
const vector <object> & operator[](int row) const
==
const *this const
const T a;
a=vectorobject[i];
[解决办法]
(1)指点一下第6行代码中array(rows)的用法,编译器怎么执行这条语句?
matrix(int rows, int cols): array(rows) //成员初始化列表
用参数中 rows 初始化成员 array
(2)分别解释一下11行两个const的具体作用?
const vector <object> & operator[](int row) const
开头的第一个const 表示返回值是 带有const 属性的,也就是不能修改返回值;
末尾的第二个const 表示这个成员函数是 const 成员函数,即这个操作不会修改任何的非mutable成员!
(3)分析一下21行语句的作用与合理性,最好能从编译器角度解释一下内存是怎么分配的?
类似于 多维数组。
vector 元素为 vector <object> 【这个元素又是一个 vector类型 ,它的元素是object类型的】,
[解决办法]
虫虫的答案很详细了