| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 389 人关注过本帖
标题:C++的问题,求大侠解释(老师也没说明白)
取消只看楼主 加入收藏
hchhbbcxl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C++的问题,求大侠解释(老师也没说明白)
#include <conio.h>
#include <memory.h>
#include <iostream>
#include "stdio.h"
using namespace std;

class matrix{
    short rows, cols;
    int *elems;
public:
    matrix(short rows, short cols);        // 构造函数
    ~matrix();                            // 析构函数

    // 重载'[]'以支持下标操作
    int* operator[] (short row);

    // 添加友元函数打印矩阵
    friend void PrintMatrix(matrix m);


     matrix(const matrix & p);            // 拷贝构造函数

     void operator = (matrix p);            // 重载'='实现矩阵之间的赋值
};


//---------------------------------------------类实现----------------------------------------------
// 构造函数,分配内存
matrix::matrix(short rows, short cols)
{
    matrix::rows = rows;
    matrix::cols = cols;
    elems = new int[rows * cols];

    // 初始化所有值为0
    memset(elems, 0, sizeof(int) * rows * cols);
}

// 析构函数,释放内存

matrix::~matrix(){
    if( elems != NULL){
        delete []elems;
        elems = NULL;
    }
}

// 重载'[]'以支持下标运算
int* matrix::operator[](short row)
{
    // 逻辑上,在类matrix的外部使用者看来它是一个二维矩阵,
    // 所以'[]'运算应该返回一个一维数组的首地址,其实是个指针
    return elems + row * cols;
}

// 输出矩阵各元素的值
void PrintMatrix(matrix m)
{
    for(int i = 0; i < m.rows; i++){
        for(int k = 0; k < m.cols; k++){
//           cout << m.elems[i * m.cols + k] << "  ";
            
        }
//        cout << endl;
    }
//    cout << endl;

}
   
// 重写拷贝构造函数
matrix::matrix(const matrix & p)
{
    rows = p.rows;
    cols = p.cols;
    elems = new int[p.rows * p.cols];
    memcpy( elems, p.elems, sizeof(double) * p.rows * p.cols);
}

// 重载'='实现矩阵之间的赋值
void matrix::operator = (matrix p)
{
    rows = p.rows;
    cols = p.cols;
    elems = new int[p.rows * p.cols];
    memcpy( elems, p.elems, sizeof(double) * p.rows * p.cols);
}

int main(int argc, char* argv[])
{
    matrix  a(2,3);

    PrintMatrix(a);

    a[0][0] = 1;
    a[0][1] = 2;
    a[0][2] = 3;
    a[1][0] = 4;
    a[1][1] = 5;
    a[1][2] = 6;

    PrintMatrix(a);

    getch();
    return 0;
}


上面的代码用F5可以运行,但使用Ctrl+F5却出现了XX遇到问题需要关闭,求解释。。。
2011-04-11 20:29
hchhbbcxl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-11
收藏
得分:0 
回复 4楼 寒风中的细雨
不会吧,但在老师的VC上也一样,而且我用VC2008也一样,好,我试下你写的,但我还想知道为什么用Ctrl+F5运行不了
2011-04-11 22:17
hchhbbcxl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-11
收藏
得分:0 
回复 4楼 寒风中的细雨
你直接复制我的程序也能正常用Ctrl+F5运行吗?
2011-04-11 22:24
hchhbbcxl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-11
收藏
得分:0 
==我发现了, memcpy( elems, p.elems, sizeof(double) * p.rows * p.cols);
memcpy(m_elems, p.m_elems, sizeof(int)*p.m_cols*p.m_rows);
应该是sizeof(int),但为什么用F5运行我上述代码的时候还是能得到结果呢?
2011-04-11 22:36
快速回复:C++的问题,求大侠解释(老师也没说明白)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022416 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved