LËp tr×nh h­íng ®èi t­îng víi C++ So¹n bëi bé m n c ng nghÖ phÇn mÒm



tải về 0.54 Mb.
trang2/3
Chuyển đổi dữ liệu26.03.2018
Kích0.54 Mb.
#36670
1   2   3

Tham so la String


Day la mot chuoi

Tham so la Stringand 10

Day la mot chuoi

Trong ch­¬ng tr×nh nµy líp CWords ®­îc ®Þnh nghÜa víi mét constructor vµ mét hµm chång Display(). Trong hµm main, khai b¸o mét ®èi t­îng X thuéc líp CWords vµ hµm Display cña nã ®­îc gäi víi c¸c tham sè kh¸c nhau.

Víi c¸c ®èi sè ®­îc ®­a vµo trong hµm kh¸c nhau ®ã nã sÏ t­¬ng øng víi tõng hµm Display ®· ®­îc khai b¸o trong líp. Víi tham sè nµo th× sö dông hµm cã ®èi sè t­¬ng øng ®ã.

X.Display(120);

X.Display('A');

X.Display("String");

X.Display("String",10);

Nh­ hµm Dislay ®­îc gäi ®Çu tiªn lµ hµm chØ cã duy nhÊt mét ®èi sè kiÓu int, cßn hµm Display gäi kÕ tiÕp lµ hµm Display mµ ®èi sè cña nã cã kiÓu char, tiÕp theo ®ã lµ hµm cã ®èi sè kiÓu con trá char, cßn hµm cuèi cïng cã hai ®èi sè lµ kiÓu chuæi vµ kiÓu sè nguyªn.


4.4 Hµm friend:
Mét hµm cã thÓ ®­îc ®Þnh nghÜa nh­ lµ mét hµm friend cña mét líp ®Ó cã thÓ truy cËp c¸c thuéc tÝnh private cña líp ®ã. Mét constructor vµ destructor cña mét líp kh«ng thÓ lµ mét hµm friend.

Trong ch­¬ng tr×nh d­íi ®©y, chóng ta sÏ sö dông mét hµm friend ®Ó céng hai biÕn kiÓu float thuéc vÒ hai líp kh¸c nhau lµ AlphaBeta. Hµm friend lµ mét h×nh thøc cÇu nèi gi÷a hai líp kh¸c nhau ®Ó truy cËp c¸c thuéc tÝnh private cña 2 líp nµy.




#include

#include



class Beta;

class Alpha

{

private:



float X;

public:

Alpha()


{

X = 5.0;


}

friend float Init(Alpha,Beta);

};
class Beta

{

private:

float Y;

public:

Beta()


{

Y = 1.0;


}

friend float Init(Alpha,Beta);

};

float Init(Alpha A,Beta B)

{

return A.X + B.Y;

}

void main()

{

clrscr();



Alpha A;

Beta B;


cout << Init(A,B) << " la ket qua cua hai lop\n";

}


Khi ch¹y ch­¬ng tr×nh trªn chóng ta sÏ ®­îc kÕt qu¶ nh­ sau:

6 la ket qua cua hai lop

ë ch­¬ng tr×nh trªn trªn chóng ta sö dông c¶ hai líp AlphaBeta. ë hai líp nµy ®Òu cã hµm constructor ®Ó khëi t¹o gi¸ trÞ cho c¸c thuéc tÝnh cña líp ®ã, lµ biÕn X ë líp Alpha vµ Y ë líp Beta. V× líp Alpha khai b¸o tr­íc líp Beta th× ®Ó trong líp Alpha cã thÓ truy cËp ®Õn líp Beta ta ph¶i khai b¸o líp Beta phÝa trªn:

class Beta

NÕu chóng ta kh«ng khai b¸o líp Beta phÝa trªn th× trong hµm Init cña líp Alpha kh«ng thÓ khai b¸o ®èi sè thuéc líp Beta.

Hµm friend Init lÊy hµm tham sè, tham sè thø nhÊt lµ líp Alpha vµ tham sè thø hai líp Beta. Hµm friend nµy kh«ng thuéc vÒ líp nµo. V× thÕ khi khao b¸o nã chóng ta kh«ng ph¶i ®­a ra nã thuéc vÒ líp nµo. V× lµ hµm friend cña c¶ hai líp Alpha vµ Beta nªn nã cã thÓ truy cËp ®Õn biÕn private X cña líp Alpha, vµ Y cña líp Beta.

Mét chó ý lµ hµm friend ph¶i ®Þnh nghÜa bªn ngoµi hay kh¸c h¬n nã kh«ng thuéc bÊt cø líp nµo.


Bµi tËp lµm thªm
Bµi 1: ViÕt mét ch­¬ng tr×nh khai b¸o líp CString, t­¬ng tù nh­ líp CString ®· viÕt trong bµi nh­ng thªm mét sè tÝnh n¨ng sau:

  • Hµm Overwrite

void Overwrite(int c,int nPos);

//thay thÕ ký tù thø nPos trong chuçi b»ng ký tù c



void Overwrite(char* str,int nPos);

//thay thÕ ký c¸c ký tù trong chuçi strNam tõ vÞ trÝ nPos ®Õn vÞ trÝ (nPos + //strlen(str) " 1) b»ng chuçi str;



  • Mét hµm constructor mÆc ®Þnh víi chuçi strName lµ rçng.

  • Hµm Insert còng hai hµm gièng nh­ hµm Overwrite nh­ng lµ chÌn t¹i vÞ trÝ nPos.

Vd: Insert("c",2); AABB -> AcABB

Insert("CC",2); AABB -> ACCABB


Bµi 2: ViÕt mét ch­¬ng tr×nh khai b¸o hai líp CCircle vµ CRectangle. Hai líp nµy cã mét hµm friend Area ®Ó tÝnh tæng diÖn tÝch cña hai h×nh nµy, hµm nµy ®­îc khai b¸o nh­ sau:

friend int Area(CCircle,CRectangle);

Bµi thùc hµnh:

BÀI THỰC HÀNH SỐ 4

Môc tiªu:



  • Đa năng hoá các toán tử.

  • Đa năng hoá toán tử gán.

  • Khởi tạo chép đối tượng.

  • Chuyển đổi kiểu với kiểu do người dùng định nghĩa.

BÀI TẬP THỰC HÀNH

4.1 Đa năng hoá toán tử

4.2 Đa năng hoá toán tử gán và khởi tạo chép đối tượng

4.3 Chuyển đổi kiểu với kiểu người dùng định nghĩa



    1. Đa năng hoá toán tử

Các toán tử ++, --, <= , > +=, có thể đa năng hoá cho các kiểu dữ liệu người dùng định nghĩa như các lớp đối tượng. Các toán tử một ngôi và toán tử hai ngôi có thể đa năng hoá như sau:

      1. Toán tử một ngôi (Unary Operators)

Chương trình sau sẽ đa năng hoá các toán tử ++ và --. Toán tử ++ chuyển các ký tự trong chuỗi ký tự thành các ký tự hoa, toán tử -- chuyển các ký tự trong chuỗi ký tự thành các ký tự thường.


  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include

#include

#include


class Converter

{

private:



char str[80];

public:

Converter()

{

strcpy(str,””);



}

Converter(char *s)

{

strcpy(str,s);



}

void display()

{

cout <

}

Converter operator ++() //dạng tiền tố

{

return (strupr(str));

}

Converter operator ++(int) //Hậu tố



{

Converter ss = str;



char *ptr = strupr(str);

strcpy (str, ptr);



return ss;

}

Converter operator -- () //dạng tiền tố



{

return (strlwr(str));

}

Converter operator --(int) //Hậu tố



{

Converter ss = str;



char *ptr = strlwr(str);

strcpy(str,ptr);



return ss;

}

};


void main()

{

clrscr();



Converter s1 = “changed to UPPERCASE”;

Converter s2 = “BACK TO LOWER CASE”;

Converter s3 = “that is all for now”;

Converter s4 = “ENDING ON A LOW NOTE”;

Converter s5;

int i, j;

++s1;


cout << “++s1 = “;

s1.display();

--s2;

cout<<”++s1 = “;



s2.display();

s5 = s3++;

cout << “Result of s5 = s3++ “<< endl << “s3 = “;

s3.display();

cout<<”s5 = “;

s5.display();

s4--;

cout<<”s4-- = “;



s4.display();

}


  1. Lưu file với tên “danag411.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :


++s1 = CHANGED TO UPPERCASE

++s1 = back to lower case

Result of s5 = s3++

s3 = THAT IS ALL FOR NOW

s5 = that is all for now

s4-- = ending on a low note


Trong chương trình trên chúng ta xây dựng lớp Converter có một thành phần dữ liệu là mảng ký tự. Chúng ta khai báo file string.h để sử dụng các hàm chuẩn về chuỗi.

Chúng ta sử dụng các hàm chuẩn về chuỗi: strupr() để chuyển chuỗi ký tự thành chuỗi ký tự hoa, strlwr() để chuyển các chuỗi ký tự thành các chuỗi ký tự thường.

Để trình biên dịch phân biệt được các toán tử ++, -- đứng trước hay là đứng sau, chúng ta sử dụng cú pháp sau:
operator++(); //dạng tiền tố operation

xác định toán tử đứng trước


operator++(int); //Hậu tố operation

xác định toán tử đứng sau. Tham số int chỉ là giả để trình biên dịch phân biệt hai hình thức trên.

Trong câu lệnh s5 = s3++ thì lệnh s5 = s3 sẽ thực hiện trước rồi đến lệnh s3++. Vì vậy kết quả in ra màn hình là:
s3 = THAT IS ALL FOR NOW

s5 = that is all for now




  1. Đóng file “danag411.cpp”




      1. Toán tử hai ngôi (Binary Operators)

Khi đa năng hoá toán tử hai ngôi, thành phần bên phải toán tử là tham số, thành phần bên trái toán tử là đối tượng thực hiện hàm.

Trong chương trình dưới đây, chúng ta sẽ đa năng hoá toán tử +=. Toán tử này kết hợp phép gán và phép cộng. Trong lệnh sau s3 = s1 += s2, s3 bằng s1 và có kết quả là s1 cộng với s2.




  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include

#include

#include

const SIZE = 80;

class CPhrase

{

private:



char str[SIZE];

public:

CPhrase() //constructors

{

strcpy(str,””);



}

CPhrase(char *s)

{

strcpy(str,s);



}

void display()

{

cout<

}

CPhrase operator +=(CPhrase aa) //overloaded +=

{

if (strlen(str) + strlen(aa.str)

{

strcat(str,aa.str);



return (*this);

}

else

{

cout<<”string is too long”;



return (*this);

}

}



};
void main()

{

clrscr();



CPhrase s1;

CPhrase s2 = “ Chao cac ban”;

s1+=s2;

s1.display();



s1 = “ Chuc suc khoe”;

CPhrase s3;

s3 = s1 += s2;

s3.display();

CPhrase s4;

CPhrase s5 = “ Xin moi vao”;

s4 = s2 += s5 += s5;

s4.display();

}


  1. Lưu file với tên “danag412.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :
Chao cac ban

Chuc suc khoe Chao cac ban

Chao cac ban Xin moi vao Xin moi vao

Nếu bạn chỉ sử dụng lệnh đơn giản là s1 += s2; thì trong hàm không cần trả về giá trị. Tuy nhiên để có được lệnh phức tạp hơn như s3 = s1 +=s2, s4 = s2 += s5 += s5 phải có kiểu trả về.



    1. Đa năng hoá toán tử gán và khởi tạo chép đối tượng

Xây dựng lớp CString như sau:


  1. Tạo file mới

  2. Gõ đoạn chương trình sau

#include

#include

#include


class CString

{

private :



char* str;

public:

CString (char* s=””) //constructor

{

int size = strlen(s);

str = new char[size+1];

strcpy(str, s);

}

CString (CString &ss) // copy constructor



{

str = new char[strlen(ss.str) + 1];

strcpy(str, ss.str);

}

~CString() //destructor



{

delete str;

}

CString&operator = (CString& ss) //toán tử gán



{

delete str;

str = new char[strlen(ss.str) + 1];

strcpy(str, ss.str);



return *this;

}

void showstring()

{

cout << str<

}

};

void main()

{

clrscr();



CString s1 = “ Chao cac ban”;

cout <<”s1 = “;

s1.showstring();

CString s2(s1), s3;

s3 = s1;

cout << “s2 = “;

s2.showstring();

cout << “s3 = “;

s3.showstring();

CString s4 = s1;

cout << “s4 = “;

s4.showstring();

}


  1. Lưu file với tên “con42.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :
s1 = Chao cac ban

s2 = Chao cac ban

s3 = Chao cac ban

s4 = Chao cac ban




    1. Chuyển đổi kiểu với kiểu người dùng định nghĩa

Chuyển đổi kiểu qua lại giữa kiểu cơ vản và kiểu đối tượng.

1.Tạo file mới

2.Gõ đoạn chương trình sau




#include

#include

#include

const SIZE = 80;



class CString

{

private:



char str[SIZE];

public:

CString ()

{

strcpy(str,””);



}

CString (char *s)

{

strcpy (str,s);



}

void getstr()

{

cout<< “Nhap vao chuoi: “;



cin >>str;

}

void display()

{

cout <

}

operator char*()

{

return (str);

}

};

void main()



{

clrscr();

CString s1;

char* p;

s1.getstr();

s1.display();

p = s1;


cout << “Chuoi p = “<


char n[15] = “Chuoi moi”;

s1 = n;


s1.display();

}





  1. Lưu file với tên “con42.cpp”

  2. Dịch và chạy chương trình

Kết quả trên màn hình là (nhấn tổ hợp phím Alt F5 để xem) :

Nhap vao chuoi: hello

hello


tải về 0.54 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương