首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手指针的拷贝构造函数

2012-12-30 
新手求助:指针的拷贝构造函数也看过了很多资料,发现都是围绕着深构造、浅构造来加以区别的。。但是所有的资料

新手求助:指针的拷贝构造函数
也看过了很多资料,发现都是围绕着深构造、浅构造来加以区别的。。但是所有的资料里面都没有谈到指针对象的拷贝构造,所以特来求助(也有可能是我学艺不精没有看懂~各位大神见谅啊~~)新手指针的拷贝构造函数

 #include<stdlib.h>
#include<iostream>
using namespace std;
class Matrix{
      
       private:      
              int lines,rows;
      public:
              int **a;
              Matrix( ){
                  cout<<"请输入矩阵行数:";
                  cin>>lines;
                  cout<<"请输入矩阵列数:";
                  cin>>rows;
                  int i;
                  a = new int*[lines];
                  for   (i=0;i<lines;i++)
                      a[i]=new int[rows];
                      };
              Matrix(const Matrix &A) { //构造函数 
                   this->lines=A.lines;
                   this->rows=A.rows;
                   a=new int * [lines];
                   for (int i=0;i < lines;i++)
                        a[i]=new int [rows];
                         }
             ~Matrix(){ //析构函数 
                       int i ;
                       for (i=0;i< lines;i++)
                           delete[] a[i];
                       delete[] a;
                       


                       };

             Matrix(Matrix  &m){
                  int i ;
                  this->lines=m.lines;
                  this->rows=m.rows;   
                  this->a = new int*[lines];
                  for   (i=0;i<lines;i++)
                      this->a[i]=new int[rows];
                 cout<<"拷贝完成!" <<endl;     }

                  void InitM(){
                 int i,j;
                 
                 for (i=0;i< lines;i++)
                     for (j=0;j< rows;j++)
                         cin>>a[i][j];
                          }
             
             void OutM(){
                  int i,j;                  
                  for (i=0;i< lines;i++)
                      { for (j=0;j< rows;j++)
                           cout<<"   "<<a[i][j];
                       cout<<endl;
                       }    
                  } 
              void PlusM(Matrix &A1,Matrix &A2){
                   int i,j;

                   for (i=0;i< lines;i++)


                       for (j=0;j< rows;j++)
                        this->a[i][j]=A1.a[i][j]+A2.a[i][j];
                        } 
              void MinusM(Matrix &A1,Matrix &A2){
                   int i,j;

                   for (i=0;i< lines;i++)
                      for (j=0;j< rows;j++)
                        this->a[i][j]=A1.a[i][j]-A2.a[i][j];
                        }
               
      };
main(){
              
       Matrix  *pA1=new Matrix;
       Matrix  *pA2(pA1);
       Matrix  *pA3(pA1); 
       cout<<"请输入矩阵pA1:"<<endl; 
       pA1->InitM();
       cout<<"请输入矩阵pA2:"<<endl;
       pA2->InitM();
       pA1->OutM();
       //pA3->PlusM(*pA1,*pA2);
      
       cout<<"pA1+pA2="<<endl;
       pA3->OutM();
       pA3->MinusM(*pA1,*pA2);
       cout<<"pA1-pA2="<<endl;
       pA3->OutM();
       
       //delete[] pA1;
       //delete[] pA2;
       //delete[] pA3;
       
       
       system("pause");
       }



[解决办法]
在Matrix  *pA2(pA1);加断点,然后按F11

热点排行