Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: class vector , không truy xuất các phần tử của private được!

  1. #1
    Ngày gia nhập
    11 2011
    Nơi ở
    Viet Nam
    Bài viết
    34

    Wink class vector , không truy xuất các phần tử của private được!

    Mình có thắc mắc là sao 2 cái class này class trên là class mẫu class dưới là mình tự viết, 2 class tương đối giống nhau thế mà ở cái hàm đa năng hóa toán tử nhập xuất của mình nó báo ko truy xuất vào phần tử private của lớp được? thế là sao nhỉ
    Code:
    #include "iostream"
    #include "stdio.h"
    #include "conio.h"
    #include "math.h"
    
    using namespace std;
    
    class vector
    {
    	private:
    		int n;//chieu vector
    		float *v;//toa do diem
    		static int count;//bien dem (neu can)
    	public:
    		vector();//constructor mac dinh
    		vector(int n1,int *a);//constructor co tham so
    		vector(const vector &s);//constructor sao chep
    		~vector();//ham deconstructor
    		friend ostream & operator<<(ostream &os,vector &s);
    		friend istream & operator>>(istream &is,vector &s);
    		vector operator=(vector &s);//ham gan =
    		int operator==(vector &s);//chong ham so sanh ==
    		int operator!=(vector &s);//chong ham so sanh khach nhau !=
    		int operator[](int);//dinh nghia toan tu lay gia tri cua vector
    		static int getcount();
    		vector operator+(vector &s);//cong 2 vector
    		vector operator-(vector &s);//tru 2 vector
    		vector operator*(vector &s);//nhan 2 vector
    		vector operator*(int a);//nhan 1 vector voi 1 so nguyen
    		vector operator/(int a);//chia 1 vector cho 1 so nguyen
    };
    int vector::count=0;//khai bao khoi tao gia tri cho ham static
    //ham lay ra gia tri cua bien dem count
    int vector::getcount()
    {
    	return count;
    }
    //ham dinh nghia constructor
    vector::vector()
    {
    	n = 10;
    	v = new float[n];
    	for(int i=0;i<n;i++)
    		v[i] = 0;
    		count++;
    }
    //ham dinh nghia constructor co tham so
    vector::vector(int n1,int *a)
    {
    	n = n1;
    	v = new float[n];
    	for(int i=0;i<n;i++)
    		v[i] = a[i];
    		count++;
    }
    //ham dinh nghia constructor sao chep
    vector::vector(const vector &s)
    {
    	n = s.n;
    	v = new float[n];
    	for(int i=0;i<n;i++)
    		v[i] = s.v[i];
    		count++;
    }
    //ham huy constructor
    vector::~vector()
    {
    	delete []v;
    	count--;
    }
    //dinh nghia chong toan tu xuat <<
    ostream & operator<<(ostream &os,vector &s)
    {
    	for(int i=0;i<s.n;i++)
        {
    		os<<s.v[i]<<" ";
    	}
    	cout<<endl;
    	return os;
    }
    //dinh nghia ham chong toan tu nhap cin >>
    istream & operator>>(istream &is,vector &s)
    {
    	cout<<"\nNhap So Phan Tu: "; is>>s.n;
    	for(int i=0;i<s.n;i++)
        {
    		cout<<"\nPhan tu thu: "<<i+1<<": ";
    		is>>s.v[i];
    	}
    	return is;
    }
    //dinh nghia chong toan tu gan =
    vector vector::operator=(vector &s)
    {
    	if(this!=&s)
        {
    		if(n!=s.n)
            {
    			delete v;
    			n = s.n;
    			v = new float[n];
    		}
    		for(int i=0;i<n;i++)
            {
    			v[i] = s.v[i];
    		}
    
    	}
        else
    		cout<<"Vector giong nhau"<<endl;
    	return *this;
    }
    //dinh nghia chong toan tu so sanh ==
    int vector::operator==(vector &s)
    {
    	if(n!=s.n)
    		return 0;
    	for(int i=0;i<n;i++)
    		if(v[i]!=s.v[i])
    			return 0;
    	return 1;
    }
    //ham so sanh khac nhau
    int vector::operator!=(vector &s)
    {
    	return !(*this==s);
    }
    //ham lay ra gia tri
    int vector::operator[](int index)
    {
    	return v[index];
    }
    //chong ham toan tu cong 2 vector +
    vector vector::operator+(vector &s)
    {
    	if(n == s.n)
        {
    		for(int i=0;i<n;i++)
    			v[i] = v[i] + s.v[i];
    	}
        else
        {
    		cout<<"\nKhong the cong";
    	}
    	return *this;
    }
    vector vector::operator-(vector &s)
    {
    	if(n == s.n)
        {
    		for(int i=0;i<n;i++)
    			v[i] += s.v[i];
    	}
        else
    		cout<<"\nkhong tru duoc";
    	return *this;
    }
    
    //chong toan tu Nhan 2 vector *
    vector vector::operator*(vector &s)
    {
    	for(int i=0;i<n;i++)
    		v[i]*=s.v[i];
    	return *this;
    }
    //chong toan tu Nhan 1 vector voi 1 so nguyen
    vector vector::operator*(int a)
    {
    	for(int i=0;i<n;i++)
    		v[i]*=a;
    	return *this;
    }
    //chong toan tu Chia 1 vector voi 1 so nguyen
    vector vector::operator/(int a)
    {
    	for(int i=0;i<n;i++)
    		v[i] /= a;
    	return *this;
    }
    int main()
    {
    	vector v;//tao va kiem tra ham thiet lap ko tham so
    	cout<<"Ham khoi tao vector khong tham so vector V\n";
    	cout<<v;
    	int a[4] = {2,4,7,9};
    	vector v1(4,a);//kiem tra ham thiet lap co tham so
    	cout<<"Ham khoi tao co tham so vector V1\n";
    	cout<<v1;//kiem tra ham thiet lap xuat cout<<
    	cout<<"Ham thiet lap sao chep V1 cho V2\n";
    	vector v2(v1);//kiem tra ham sao chep
    	cout<<v2;
    	vector v3;
    	cin>>v3;// kiem tra toan tu nhap cin>>
    	cout<<"\nVector V3 = "<<v3;
    	cout<<"\nKiem tra toan tu gan ";
    	v = v3;//kiem tra toan tu gan =
    	cout<<"Vector V = "<<v;
    	if(v3==v)
        {//kiem tra ham so sanh
    		cout<<"Vector V3 == Vector V";
    	}
        else
        {
    		cout<<"Vector V3 != Vector V";
    	}
    	cout<<"\nPhan tu thu V[1]= "<<v[1];//kiem tra ham lay gia tri
    	vector v5 = v3+v1;
    	cout<<"\nVector V3 + Vector V1 = "<<v5;
    	vector v6 = v3*3;
    	cout<<"\nVector V3 * 3 = "<<v6;
    	vector v7 = v1/2;
    	cout<<"\nVector V7 = V1 / 2 = "<<v7;//kiem tra ham chia tra ve kieu so nguyen
    	cout<<"\nSo Vector duoc khoi tao la: "<<vector::getcount();
    	getch();
    }
    class của mỉnh viết
    Code:
    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    
    using namespace std;
    
    class vecto
    {
          private:
                  int n;
                  float *v;
          public:
                 vecto();
                 vecto(const vecto &);
                 vecto(int,float *);
                 ~vecto();
                 void nhap();
                 void xuat();
                 vecto operator = (vecto &);
                 int operator !=(vecto &);
                 vecto operator + (vecto &);
                 vecto operator * (vecto &);
                 friend ostream & operator >> (ostream &nhap, vecto &s);
                 friend istream & operator << (istream &xuat, vecto &s); 
    };
    vecto::vecto()
    {
                 int n=3;
                 v = new float[n];
                 for(int i=1;i<=n;i++)
                         v[i] = 1;
    } 
    vecto::vecto(const vecto &s) 
    {
                 n=s.n;
                 v = new float[n];
                 for(int i=1;i<=n;i++)
                         v[i]=s.v[i];
    }
    vecto::vecto(int n1, float *v1)
    {
                 n=n1;
                 v1 = new float[n];
                 for(int i=1;i<=n;i++)
                         v[i]=v1[i];
    }
    vecto::~vecto()
    {
                   delete v;
    }
    void vecto::nhap()
    {
         for(int i=1;i<=n;i++)
         {
                 cout<<"Nhap phan tu thu "<<i<<"\n";
                 cin>>v[i];
         }
    }
    void vecto::xuat()
    {
         cout<<"Vecto V = ";
         for(int i=1;i<=n;i++)
                 cout<<v[i]<<"  ";
    }
    vecto vecto::operator = (vecto &s)
    {
          if(this!=&s)
          {
                      if(n!=s.n)
                      {
                                delete v;
                                n=s.n;
                                v = new float[n];
                      }
                      for(int i=1;i<=n;i++)
                      {
                              v[i]=s.v[i];
                      }
          }
          else cout<<"Hai vecto giong nhau!";
          return *this;
    }
    int vecto::operator != (vecto &s)
    {
        return !(this==&s);
    }
    vecto vecto::operator + (vecto &s)
    {
          if(n==s.n)
          {
                    for(int i=1;i<=n;i++)
                            v[i]=v[i]+s.v[i];
          }
          else cout<<"Hai vecto khong cung cap khong cong duoc!";
          return *this;
    }
    vecto vecto::operator * (vecto &s)
    {
          if(n==s.n)
          {
                    for(int i=1;i<=n;i++)
                            v[i]=v[i]*s.v[i];
          }
          else cout<<"Hai vecto khong cung cap khong nhan duoc!";
          return *this;
    }
    istream & operator >>(istream &nhap,vecto &s)
    {
            cout<<"Nhap so chieu: ";
            nhap>>s.n;
            for(int i=1;i<=s.n;i++)
            {
                    cout<<"Phan tu thu "<<i<<"";
                    nhap>>s.v[i];
            }
            return nhap;
    }
    ostream & operator <<(ostream &xuat,vecto &s)
    {
            cout<<"Vecto V la: ";
            for(int i=1;i<=s.n;i++)
            {
                    xuat<<s.v[i];
            }
            return xuat;
    }
    int main()
    {
        vecto v;
        cout<<"Ham khoi tao vecto khong tham so ";
        cin>>v;
        int k[4]={1,3,5,7};
        vecto v1(4,a);
        cout<<"Ham khoi tao vecto co tham so ";
        cout<<v1;
        vecto v2(v1);
        cout<<"Ham thiet lap sao chep vecto v2 cho v1 ";
        cout<<v2;
        vecto v3;
        cout<<"Ham nhap xuat ->nhap vecto v3";
        v3.nhap();
        cout<<"Xuat vecto v3: ";
        v3.xuat();
        cout<<"Kiem tra toan tu so sanh!";
        if(v3!=v)
                 cout<<"Vecto v3 khac vecto v";
        else cout<<"Vecto v3 bang vecto v";
        cout<<"Da nang hoa toan tu nhap xuat ->nhap vecto v4";
        cin>>v4;
        cout<<"Xuat vecto v4: ";
        cout<<v4;
        vecto  v5 = v2 + v3;
        cout<<"Vecto v2 +vecto v3 = ";
        cout<<v5;
        vecto v6 = v3 * v4;
        cout<<"Vec to v3 nhan vecto v4 = ";
        cout<<v6;
        getch();
    }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    C++ Code:
    1. friend ostream & operator >> (ostream &nhap, vecto &s);
    2. friend istream & operator << (istream &xuat, vecto &s);
    Cái gì đây ?? .
    Tính làm cout>> rồi cin<< hả ?

    Đối chiếu prototype và định nghĩa thân hàm.
    Đã được chỉnh sửa lần cuối bởi clchicken : 01-01-2012 lúc 11:33 PM.
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    11 2011
    Nơi ở
    Viet Nam
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    C++ Code:
    1. friend ostream & operator >> (ostream &nhap, vecto &s);
    2. friend istream & operator << (istream &xuat, vecto &s);
    Cái gì đây ?? .
    Tính làm cout>> rồi cin<< hả ?
    Đối chiếu prototype và định nghĩa thân hàm.
    ối trời hóa ra là thế, tối nên chắc mắt mũi mờ hết chả nhận ra lỗi gì nữa thank đại ca nha

Các đề tài tương tự

  1. Về vấn đề truy thành phần private
    Gửi bởi ductri_vn trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 6
    Bài viết cuối: 10-09-2013, 04:22 PM
  2. Lập trình C++ Làm sao để truy xuất thuộc tính private của lớp cha
    Gửi bởi luongvancong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 27-10-2011, 05:00 PM
  3. chuyển class thành mảng và truy xuất phần tử?
    Gửi bởi congbac trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 25-06-2011, 10:22 PM
  4. Bài tập C++ sử dụng class, làm thế nào truy cập vào biến private?
    Gửi bởi zenstorm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 07-11-2010, 03:03 PM
  5. Lỗi private trong việc truy xuất lớp
    Gửi bởi small_ant trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 28-09-2010, 08:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn