Xu Hướng 12/2023 # Lớp Và Phương Thức Trong C# (Bài 5) # Top 16 Xem Nhiều

Bạn đang xem bài viết Lớp Và Phương Thức Trong C# (Bài 5) được cập nhật mới nhất tháng 12 năm 2023 trên website 2atlantic.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Lớp và phương thức trong c# sẽ trình bày tổng quan về lập trình hướng đối tượng (Object-Oriented Programming). Ngôn ngữ lập trình dựa trên hai khái niệm cơ bản là dữ liệu và cách thức để thao tác dữ liệu.

Ngôn ngữ lập trình truyền thống như C tập trung vào cách thao tác dữ liệu hơn là dữ liệu và điều này có một vài nhược điểm như khả năng tái sử dụng và khả năng bảo trì bị hạn chế.

Để khắc phục những khó khăn trên, ngôn ngữ lập trình hướng đối tượng được giới thiệu, trong đó tập trung vào dữ liệu chứ không phải là cách thao tác dữ liệu.Trong lập trình hướng đối tượng sẽ định nghĩa các đối tượng bao gồm thuộc tính (data) và phương thức (thao tác với dữ liệu).

Lớp và phương thức trong c# – Đặc điểm

Bảng sau đây trình bày những đặc điểm của lập trình hướng đối tượng

Abstraction (Trừu tượng)Trừu tượng là một tính năng giúp hiển thị các thông tin cần thiết từ đối tượng.Encapsulation (Đóng gói)Những khai báo trong một lớp có thể bị ẩn ở lớp khác và chỉ có những thông tin cụ thể có thể được sử dụng.Inheritance (Kế thừa)Thừa kế là quá trình của việc tạo ra một lớp mới dựa trên các thuộc tính và phương thức của một lớp học hiện có. Các lớp học hiện có được gọi là lớp cơ sở trong khi lớp mới tạo ra được gọi là lớp dẫn xuất. Polymorphism (Đa hình)Đa hình là khả năng ứng xử khác nhau trong các tình huống khác nhau.

Lớp và phương thức trong c# – Lớp và đối tượng

Lớp là khuôn mẫu để tạo ra đối tượng. Một đối tượng là một thể hiện của lớp và bên trong nó là những thuộc tính, biến hoặc hành vi (hay còn gọi là phương thức).

Ví dụ một chiếc xe Exciter, một chiếc xe Airblade, một chiếc xe Attila có thể được nhóm lại với nhau thành lớp Motorbike.

Kết quả sau khi tạo lớp Motorbike

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication.lesson03 { class Motorbike { } }

Tạo đối tượng (Instantiating Objects): Sử dụng cú pháp sau để tạo đối tượng

ClassName objectName = new ClassName();

Ví dụ tạo đối tượng là exciter sử dụng lớp Motorbike

Motorbike exciter = new Motorbike(); Lớp và phương thức trong c# – Thuộc tính

Thuộc tính là những thông tin cần được lưu trữ của đối tượng. Ví dụ đối tượng sinh viên cần lưu trữ các thông tin về mã sinh viên, tên sinh viên, giới tính, … Đây chính là thuộc tính trong lập trình hướng đối tượng nói chung và trong C# nói riêng.

Khai báo thuộc tính trong C#

accessModifier dataType attributeName;

Access Modifiers cho phép các lập trình viên chỉ định quyền truy cập của các lớp khác vào các thuộc tính. Bảng bên dưới trình bày các quyền truy cập hiện có trong C#

publicTruy cập không hạn chế.protectedGiới hạn truy cập. Có thể được truy cập bên trong một lớp hoặc những lớp con.internalTruy cập bị giới hạn bên trong assembly.privateGiới hạn truy cập bên trong lớp khai báo.

Data type là kiểu dữ liệu đã được chúng tôi trình bày trong bài học Giới thiệu ngôn ngữ lập trình C#

Ví dụ khai báo thuộc tính trong C#

private string studentName; private string studentAddress; private string studentGender; Lớp và phương thức trong c# – Phương thức

Nếu như thuộc tính là đặc điểm của đối tượng và chứa thông tin của đối tượng thì phương thức là những xử lý chẳng hạn như xử lý hiển thị thông tin sinh viên, xử lý tìm kiếm sinh viên theo mã số, …

Khai báo phương thức trong C#

}

Ví dụ khai báo phương thức trong C#

public void Display(){ Console.Write("Name of student: " + name); Console.Write("Address of student: " + address); Console.Write("Gender of student: " + gender); } Lớp và phương thức trong c# – Ví dụ mẫu

Tạo lớp Motorbike

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication.lesson03 { class Motorbike { private string name; private string type; private string color; private int guarantee; public void Input() { Console.Write("Enter motorbike name: "); name = Console.ReadLine(); Console.Write("Enter motorbike type: "); type = Console.ReadLine(); Console.Write("Enter motorbike color: "); color = Console.ReadLine(); Console.Write("Enter motorbike guarantee: "); guarantee = Convert.ToInt32(Console.ReadLine()); } public void Display() { Console.WriteLine("Motorbike name: " + name); Console.WriteLine("Motorbike color: " + color); Console.WriteLine("Motorbike type: " + type); Console.WriteLine("Motorbike guarantee: " + guarantee); } } }

Tạo đối tượng exciter sử dụng lớp Motorbike

Motorbike exciter = new Motorbike(); exciter.Input(); exciter.Display(); Lớp và phương thức trong c# – Từ khoá static

Từ khoá static được sử dụng để khai báo lớp (static class), khai báo thuộc tính (static attribute), khai báo phương thức (static method).

Sử dụng static trong khai báo lớp (static class):

Một lớp được khai báo với từ khoá static sẽ không thể tạo đối tượng và không cho kế thừa. Mục đích của việc sử dụng từ khoá static trong khai báo lớp là lớp này chỉ chứa các thành viên static (thuộc tính và phương thức).

Ví dụ tạo lớp static

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication.lesson03 { static class Product { public static int productId; public static float productPrice; public static void Display() { Console.WriteLine("Product id: " + productId); Console.WriteLine("Product price: " + productPrice); } } }

Ví dụ sử dụng lớp static

Product.productId = 1; Product.productPrice = 72.5F; Product.Display();

Lưu ý

Thuộc tính, phương thức được khai báo với từ khoá static sẽ được truy cập sử dụng tên lớp thay vì sử dụng tên đối tượng.

Trong một lớp, một biến được khai báo là static sẽ được sử dụng chung cho tất cả các đối tượng của lớp.

Vi vậy một sự thay đổi của biến sẽ ảnh hưởng đến tất cả các đối tượng. Như vậy static không nên sử dụng để khai báo thuộc tính.

Lớp và phương thức trong c# – Phương thức nạp chồng (overloading method)

Trong một lớp không thể chứa 2 phương thức cùng tên, cùng danh sách tham số (kiểu dữ liệu và số lượng tham số) nhưng lập trình viên có thể khai báo nhiều phương thức cùng tên nhưng khác nhau về danh sách tham số (khác kiểu dữ liệu, số lượng tham số).

Và phương pháp này được gọi là Overloading method. Đây chính là đặc điểm của tính đa hình trong lập trình hướng đối tượng.

Ví dụ khai báo và viết xử lý cho 2 phương thức không hợp lệ trong C#

Ví dụ khai báo và viết xử lý cho 2 phương thức hợp lệ trong C#

internal float Addition(float n1, float n2) { return n1 + n2; } internal float Addition(float n1, float n2, float n3) { return n1 + n2 + n3; } Lớp và phương thức trong c# – Đối số được truyền theo tham chiếu

Chúng ta có thể sử dụng từ khoá out hoặc ref để thực hiện truyền đối số theo tham chiếu nghĩa là những thay đổi cho đối số sẽ bị ảnh hưởng sau khi kết thúc phương thức.

Điểm khác biệt duy nhất giữa out và ref là ref yêu cầu biến phải được khởi tạo trước khi được truyền vào phương thức.

Ví dụ về out và ref trong C#

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication.lesson04 { class OutAndRefExample { internal void Init(out int value) { value = 10; } internal void Swap(ref int val1, ref int val2) { int tmp; tmp = val1; val1 = val2; val2 = tmp; } } }

Gọi phương thức và truyền tham số

OutAndRefExample oare = new OutAndRefExample(); int n; oare.Init(out n); Console.WriteLine("n = " + n); int a = 1, b = 2; oare.Swap(ref a, ref b); Console.WriteLine("a = {0}, b = {1}", a, b); Lớp và phương thức trong c# – Từ khoá this

Tương tự như lập trình Java, từ khoá this được sử dụng thể tham khảo đến đối tượng hiện hành của lớp để giải quyết sự xung đột giữa các biến hoặc thuộc tính cùng tên khi thực hiện truyền đối số của phương thức

Ví dụ sử dụng từ khoá this

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication.lesson04 { class Motorbike { private string name; private string type; private string color; private int guarantee; public Motorbike(string name, string type, string color, int guarantee) { chúng tôi = name; chúng tôi = type; this.color = color; this.guarantee = guarantee; } public void Input() { Console.Write("Enter motorbike name: "); name = Console.ReadLine(); Console.Write("Enter motorbike type: "); type = Console.ReadLine(); Console.Write("Enter motorbike color: "); color = Console.ReadLine(); Console.Write("Enter motorbike guarantee: "); guarantee = Convert.ToInt32(Console.ReadLine()); } public void Display() { Console.WriteLine("Motorbike name: " + name); Console.WriteLine("Motorbike color: " + color); Console.WriteLine("Motorbike type: " + type); Console.WriteLine("Motorbike guarantee: " + guarantee); } } } Lớp và phương thức trong c# – Bài tập thực hành

Giả sử bạn là một thành viên trong nhóm lập trình và được giao nhiệm vụ viết chương trình với yêu cầu cụ thể sau đây:

a) Tạo lớp Medicine được sử dụng để lưu trữ các thông tin sau

Medicine Code

Medicine Name

Manufacturer Name

Unit Price

Quantity On Hand

 Manufactured Date

Expiry Date

Batch Number

b) Tạo lớp Sales được sử dụng để lưu trữ các thông tin sau

Medicine Code

Quantity Sold

Planned Sales

Actual Sales

Region

c) Mỗi lớp sử dụng phương thức khởi tạo để khởi tạo dữ liệu

d) Phương thức Accept() trong mỗi lớp được sử dụng để nhập và lưu dữ liệu cho các thuộc tính.

e) Phương thức Print() trong lớp Medicine được sử dụng để hiển thị thông tin của tất cả các thuộc tính.

f) Phương thức Display() trong lớp Sales để hiển thị tất cả thông tin của các thuộc tính trong lớp này. Một phương thức khác cùng tên được sử dụng để hiển thị thông tin của các thuộc tính theo Medicine Code.

g) Tạo lớp Test cài đặt phương thức Main() và cho phép người dùng tạo và hiển thị Medicine, Sales.

Lớp Và Phương Thức Trong Java

Lớp (class) trong Java

Lớp (class) là mô tả về các đối tượng sẽ được tạo ra. Mỗi lớp có tên lớp, trong lớp có các thuộc tính như là dữ liệu của lớp và các ứng xử của lớp đó (các hàm) gọi là các phương thức.

Ví dụ một lớp mô tả về con người có thể có:

Các thuộc tính: tên, chiều cao, cân nặng, giới tính, tuổi …

Các ứng xử: đi, chạy, nhảy, nói, ngủ …

Từ lớp con người như vậy tạo ra các đối tượng cụ thể khi chạy chương trình như: Đàn ông, Phụ nữ, Bạn A, Bạn B …

Các lớp (class) được định nghĩa bằng cách dùng từ khóa class sẽ tìm hiểu sau, ví dụ:

public class ClassName { } Phương thức là gì?

Các phương thức (method) định nghĩa ứng xử của lớp. Một phương thức là một tập hợp các khối lệnh (code) để thi hành một chức năng nào đó. Ví dụ như System.out.println() đã biết, là một phương thức. Bạn có thể định nghĩa phương thức riêng của bạn, thi hành với một nhiệm vụ cụ thể nào đó

Hãy xem ví dụ sau:

class MyClass { static voidsayHello() { System.out.println("Hello World!"); } public static void main(String[ ] args) { sayHello(); } }

Trong ví dụ trên, đã định nghĩa một phương thức sayHello(), phương thức đó được hàm main() gọi để in ra lời chào mừng. Như vậy để gọi phương thức để thi hành code chỉ cần viết tên phương thức và truyền các tham số nếu cần thiết. Một phương thức có thể gọi bao nhiêu lần là tùy mục đích.

Phần khai báo phương thức tên bạn thấy ngoài tên phương thức là sayHello và code của phương thức trong khối{...} thì bạn còn thấy:

static từ khóa này trước tên phương thức cho biết phương thức được gọi mà không cần thiết phải tạo đối tượng của phương thức, ngoài từ khóa này còn có các từ khóa nhưpublic, protected, private sẽ tìm hiểu kỹ ở phầnphạm vi truy cập (Access modifier) Java

void cho biết phương thức này khi kết thúc không trả về dữ liệu gì, nếu sau này phương thức cần trả về dữ liệu thì thay bằngvoid bằng kiểu dữ liệu trả về nhưint, String …

Tham số của phương thức

Bạn có thể tạo phương thức chấp nhận các tham số truyền vào. Tham số được mô tả trong dấu cặp ngoặc (), các tham số mô tả bởi kiểu dữ liệu và tên tham số, nhiều tham số thì cách nhau bởi dấu phảy,

Ví dụ phương thức sau có tên welcome, có một tham số kiểu String có tên là name

class MyClass { static voidwelcome(String name) { System.out.println("Xin chào, " + name); } public static void main(String[ ] args) {welcome("Minh");welcome("An");welcome("Tý"); } } Tham số tùy chọn

Java có cách khai báo tham số cho phương thức mà khi gọi phương thức số lượng giá trị truyền vào là tùy thích cách nhau bởi dấu phảy ,. Các giá trị tham số phương thức nhận được lưu trong một mảng. Khai báo kiểu tham số này sử dụng ký hiệu ba chấm... (Kiểu-dữ-liệu … tên-biến).

Hãy xem ví dụ sau, phương thức showProductNames() có tham số tùy chọn có tên names như sau:

class MyClass { static void showProductNames(String ... names) { int sotenSanpham = names.length; System.out.println("Số tên sản phẩm: " + sotenSanpham); for (String name : names) { System.out.println(name); } } public static void main(String[ ] args) { showProductNames("Iphone 8", "Note 10", "Macbook Pro"); } }

Ví dụ trên, tham số names như là mảng truyền vào phương thức. Số phần tử quyết định khi truyền tham số cho hàm, như trên là 3 phần tử.

Giá trị trả về của phương thức

Một phương thức có thể có giá trị trả về, sử dụng từ khóa return trong thân phương thức để kết thúc và trả về giá trị, hãy xem phương thức sau:

staticint sum(int val1, int val2) {

Chú ý trong định nghĩa phương thức, kiểu trả về phải được định nghĩa trước tên phương thức, như trên đó là kiểu int.

Giờ là ví dụ sử dụng phương thức trên

class MyClass { static int sum(int val1, int val2) { return val1 + val2; } public static void main(String[ ] args) { int x =sum(2, 5); System.out.println(x); } }

Bạn thấy, giá trị trả về của phương thức đã được gán vào biến x.

Khi phương thức bạn xây dựng mà không có giá trị trả về thì cần phải khai báo với từ khóa void.

staticint returnFive() { return 5; } Tạo lớp class trong Java

Eclipse sẽ tạo ra file Animal.java, và khai báo sẵn lớp Animal trong file đó giúp bạn

Animal.java

package animals; public class Animal { }

Giờ thêm một phương thức có tên bark() trong lớp

Animal.java

package animals; public class Animal { public void bark() { System.out.println("Gâu Gâu ..."); } }

Như vậy đã có lớp Animal, trong lớp có phương thức bark()

Ta thấy phương thức bark() khai báo không có từ khóa public static như các ví dụ trước đây, điều này có nghĩa để gọi được hàm này cần phải tạo ra đối tượng cụ thể cho lớp Animal.

Ví dụ sử dụng lớp đó trong hàm main của lớp MyClass. Đối tượng mới của lớp tạo ra bằng từ khóa new

import animals.Animal; class MyClass { public static void main(String[] args) { Animal dog =new Animal();dog.bark(); } }

Trong ví dụ trên ta đã tạo ra đối tượng Animal lưu trong dog và để truy cập vào các phương thức và thuộc tính dùng dấu châm và tên phương thức, thuộc tính như dog.bark()

Thuộc tính của lớp

Như ta đã biết lớp có thuộc tính và phương thức. Thuộc tính cơ bản là biến bên trong một lớp, nó là thành viên lưu trữ dữ liệu của lớp. Ví dụ tạo ra lớp với phương thức và thuộc tính như sau:

public class Vehicle { int maxSpeed; int wheels; String color; double fuelCapacity; void horn() { System.out.println("Beep!"); } }

maxSpeed, wheels, color, fuelCapacity là các thuộc tính của lớp, còn horn() là phương thức.

Ví dụ sử dụng

class MyClass { public static void main(String[] args) { Vehicle v1 = new Vehicle(); Vehicle v2 = new Vehicle(); v1.color = "red"; v2.horn(); String colorv1 = v1.color; } }

Tham khảo mã nguồn ClassAndMethod (git) hoặc tải về source-methodandclass

Bài 5: Static Trong Hướng Đối Tượng C++

Liên hệ ngay: 035.870.8844

1. Định nghĩa Static c++

Static trong c++ là dữ liệu của lớp không phải là dữ liệu của đối tượng. Static trong c++ tồn tại như một biến toàn cục. Hay nói cách khác dữ liệu static xuất hiện trước khi bạn khởi tạo đối tượng của lớp, và nó chỉ tồn tại duy nhất.

Các thành viên static có thể là public, private hoặc protected.

Static ngoài khai báo biến còn có thể khai báo hàm.

Đối với class, static dùng để khai báo thành viên dữ liệu dùng chung cho mọi thể hiện của lớp:

Một bản duy nhất tồn tại trong suốt quá trình chạy của chương trình.

Dùng chung cho tất cả các thể hiện của lớp.

Bất kể lớp đó có bao nhiêu thể hiện.

2. Biến static trong hướng đối tượng c++

Ví dụ mình sẽ khai báo một biến static, int count, biến này dùng để đếm số lượng các hình chữ nhật đã được tạo ra.

Như vậy khi một đối tượng được tạo chúng ta sẽ tăng count lên để thực hiện đúng ý đồ đếm hình chữ nhật.

Tuy nhiên chúng ta không thể gán trước giá trị ban đầu của static trong class mà chúng ta phải gán giá trị cho nó ở ngoài class.

ví dụ

Ví dụ bên trên chỉ rõ biến static count không phải là dữ liệu của đối tượng như width và length mà nó là dữ liệu của class và chỉ tồn tại duy nhất.

Để sử dụng, gán hoặc lấy giá trị của static bạn sử dụng phạm vi truy xuất để gọi nó

Lưu ý thêm ở phần khai báo mình để static count ở private, nên bên ngoài class không thể dùng phạm vi truy xuất đến truy cập (Như cách gọi ) Nhưng việc khai báo và gán giá trị ban đầu như là được phép.

Để dùng bạn có thể khai báo biến static này ở public hoặc viết thêm hàm static get giá trị count này.

3. Hàm static trong hướng đối tượng c++

Hàm static có vai trò cũng như biến static. Nghĩa là khi bạn đã khai báo class nhưng chưa tạo ra đối tượng như thì chúng ta vẫn truy cập được biến count như ví dụ trên. Vậy ở phần hàm static cũng có vai trò như vậy, hàm này sẽ là tồn tại duy nhất của class.

a. Code cụ thể về static b. Gọi hàm static

Bạn có thể gọi hàm static bằng cách sau:

Chủ đề này không thật sự quan trọng lắm, tuy nhiên bạn cũng nên hiểu vì nó rất dễ 🙂

Lớp Và Đối Tượng Trong C++

1. Đối tượng (object) trong C++

Trong C++, Object là một thực thể trong thế giới thực, ví dụ: ghế, xe hơi, bút, điện thoại di động, máy tính xách tay, v.v.

Hay nói cách khác, đối tượng là một thực thể có trạng thái và hành vi. Ở đây, trạng thái có nghĩa là dữ liệu và hành vi có nghĩa là hàm.

Đối tượng là một thực thể runtime, bởi vì nó được tạo ra trong runtime.

Đối tượng là một thể hiện của một lớp. Tất cả các thành viên của lớp có thể được truy cập thông qua đối tượng.

Chúng ta cùng xem một ví dụ về khởi tạo đối tượng trong C++ như sau:

Trong đó SinhVien là lớp, SinhVien là kiểu dữ liệu như các kiểu dữ liệu khác như int, float, long, … và s1 là biến tham chiếu đến thể hiện của lớp SinhVien.

2. Lớp (class) trong C++

Trong C++, lớp là một nhóm các đối tượng tương tự. Lớp là một mẫu mà từ đó các đối tượng được tạo ra. Lớp có thể có các trường (fields), các phương thức (methods), các hàm xây dựng (constructors ), …

Chúng ta sẽ lấy một ví dụ về lớp NhanVien có 3 trường đó là id, tên, và lương được khai báo trong C++ nhự sau:

class NhanVien { int id; string ten; float luong; }; 3. Ví dụ

Ví dụ 1: Giả sử chúng ta có lớp học sinh có 2 trường đó là mã số học sinh và tên. Ví dụ sau đây sẽ khai báo lớp học sinh, khởi tạo đối tượng của lớp học sinh và in thông tin đối tượng ra màn hình.

using namespace std; class HocSinh { public: int mshc; string ten; }; int main() { HocSinh s1; HocSinh s2; /*Khoi tao gia tri cho doi tuong s1*/ chúng tôi = 1111245; chúng tôi = "Nguyen Van A"; /*Khoi tao gia tri cho doi tuong s2*/ chúng tôi = 1111246; chúng tôi = "Nguyen Van B"; cout << chúng tôi << " - " << chúng tôi << endl; cout << chúng tôi << " - " << chúng tôi << endl; return 0; }

Và kết quả sau khi thực thi chương trình trên như sau:

Ví dụ 2: Khởi tạo và hiển thị đối tượng thông qua phương thức.

Cũng là ví dụ trên, nhưng chúng ta sẽ khởi tạo đối tương và in đối tượng ra màn hình thông qua phương thức.

using namespace std; class HocSinh { public: int mshc; string ten; void ThemHS(int m, string t) { mshc = m; ten = t; } void HienThi() { cout << mshc << " - " << ten << endl; } }; int main() { HocSinh s1; HocSinh s2; /*Khoi tao gia tri cho doi tuong s1 thong qua phuong thuc ThemHS*/ s1.ThemHS(1111245, "Nguyen Van A"); /*Khoi tao gia tri cho doi tuong s2 thong qua phuong thuc ThemHS*/ s2.ThemHS(1111246, "Nguyen Van B"); s1.HienThi(); s2.HienThi(); return 0; }

Và kết quả sau khi thực thi chương trình trên như sau:

Ví dụ 3: Lưu trữ và hiển thị thông tin nhân viên

Giả sử chúng ta cần lưu trữ các thông tin nhân viên như mã số nhân viên, tên, giới tính, lương. Được mô hình hóa thành hướng đối tượng trong C++ như sau:

using namespace std; class NhanVien { public: int msnv; string ten; int tuoi; string gioitinh; float luong; void ThemNV(int m, string tn, int t, string gt, float l) { msnv = m; ten = tn; tuoi = t; gioitinh = gt; luong = l; } void HienThi() { cout << ten << endl; cout << " Ma so nhan vien: " << msnv << endl; cout << " Tuoi: " << tuoi << endl; cout << " Gioi tinh: " << gioitinh << endl; cout << " Luong: " << (float)luong << endl; } }; int main(void) { NhanVien n1; NhanVien n2; n1.ThemNV(111231, "Nguyen Van A", 25, "nam", 20000); n2.ThemNV(111234, "Nguyen Thi Lieu", 23, "nu", 290000); n1.HienThi(); n2.HienThi(); return 0; }

Và kết quả sau khi thực thi chương trình trên như sau:

4. Lời kết

Như vậy là chúng ta đã tìm hiểu xong về lớp và đối tượng trong C++ là gì rồi. Ở bài này các bạn cần ghi nhớ cách để khai báo lớp trong C++, cách để tạo đối tượng và khởi tạo giá trị cho đối tượng trong C++ là như thế nào.

Bài 9: Lớp Lưu Trữ (Storage Classes) Trong C++

Một lớp lưu trữ trong ngữ cảnh của khai báo biến C ++ là một kiểu dùng để xác định và điều khiển sự tồn tại, liên kết, vị trí bộ nhớ của các đối tượng (bao gồm biến). Một đối tượng đã cho có thể chỉ có một lớp lưu trữ. Các biến được định nghĩa trong một khối có lưu trữ tự động trừ khi có quy định khác bằng cách sử dụng các đặc tả extern, static hoặc thread_local. Các đối tượng và biến tự động không có liên kết; chúng không hiển thị với mã bên ngoài khối.

Có năm loại lớp lưu trữ trong C ++:

1. Lớp lưu trữ Tự động (Automatic Storage Class)

Lớp lưu trữ tự động (Automatic Storage Class) gán một biến cho kiểu lưu trữ mặc định của nó. từ auto được sử dụng để khai báo biến tự động. Tuy nhiên, nếu một biến được khai báo mà không có bất kỳ từ khoá bên trong một chức năng, nó là tự động theo mặc định. Biến này chỉ hiển thị bên trong hàm mà nó được khai báo và thời gian sống của nó cũng giống như thời gian tồn tại của hàm. Một khi thực hiện chức năng hoàn thành, biến sẽ bị hủy.

Cú pháp datatype var_name1 [= value]; hoặc auto datatype var_name1 [= value]; Ví dụ auto int x; float y = 5.67; 2. Lớp lưu trữ bên ngoài (External Class)

Lớp lưu trữ bên ngoài gán một biến tham chiếu đến một biến toàn cục được khai báo bên ngoài chương trình đã cho. được sử dụng để khai báo biến External. Chúng có thể nhìn thấy (visible) trong suốt chương trình và thời gian sống (lifetime) của nó cũng giống như thời gian sống của chương trình khi nó được khai báo. Điều này hiển thị cho tất cả các chức năng có trong chương trình.

Cú pháp extern datatype var_name1; Ví dụ 1: extern float var1; Ví dụ 2: Chương trình C ++ để tạo và sử dụng EXTERNAL CLASS. int test = 100; / / gán giá trị để kiểm tra void multiply(int n) { test=test*n; } #include "sub.cpp" using namespace std; extern int test; int main() { cout<<test<<endl; multiply(5); cout<<test<<endl; return 0; }

Một biến test được khai báo là external trong chúng tôi . Nó là một biến toàn cục và nó được gán cho giá trị 100 trong chúng tôi . Nó có thể được truy cập trong cả hai tập tin. Hàm multiply () nhân giá trị của test với tham số được truyền vào trong khi gọi nó. Chương trình thực hiện phép nhân và thay đổi giá trị biến toàn cục thành 500 .

Lưu ý : Chạy chương trình main.cpp

Đầu ra

100 500 3. Lớp lưu trữ tĩnh (Statics Class)

Lớp lưu trữ tĩnh đảm bảo một biến có chế độ hiển thị của một biến địa phương nhưng có thời gian tồn tại của một biến external. Nó chỉ có thể được sử dụng trong các hàm mà nó được khai báo nhưng bị hủy chỉ sau khi chương trình đã kết thúc. Khi một hàm được gọi, biến được định nghĩa là static bên trong hàm giữ lại giá trị trước đó và hoạt động trên nó. Điều này chủ yếu được sử dụng để lưu các giá trị trong một hàm đệ quy.

Cú pháp static datatype var_name1 [= value];

Ví dụ:

static int x = 101; static float sum; 4. Lớp Register (Register Storage Class)

Lớp Register gán một bộ nhớ của biến trong các thanh ghi của CPU chứ không phải là bộ nhớ chính. Nó có thời gian tồn tại và khả năng hiển thị giống như biến tự động (Auto Class). Mục đích của việc tạo biến Register là tăng tốc độ truy cập và làm cho chương trình chạy nhanh hơn. Nếu không có không gian có trong Register, các biến này được lưu trữ trong bộ nhớ chính và hành động tương tự như các biến của lớp lưu trữ tự động. Vì vậy, chỉ có những biến cần truy cập nhanh nên được khai báo ở lớp Register.

Cú pháp register datatype var_name1 [= value]; Ví dụ 1 register int id; register char a; Ví dụ 2: Chương trình C ++ tạo các biến tự động, toàn cục, tĩnh và Register.

using namespace std;

int g;

void test_function() { static int s; register int r; r=5; s=s+r*2; cout<<“Inside test_function”<<endl; cout<<“g = “<<g<<endl; cout<<“s = “<<s<<endl; cout<<“r = “<<r<<endl; }

int main() { int a; g=25; a=17; test_function(); cout<<“Inside main”<<endl; cout<<“a = “<<a<<endl; cout<<“g = “<<g<<endl; test_function(); return 0; }

Trong chương trình trên, g là một biến toàn cầu, s là static, r là register và a là một biến tự động. Chương trình đã xác định hai chức năng, đầu tiên là hàm main() và một hàm test_function (). Vì g là biến toàn cục, nó có thể được sử dụng trong cả hai chức năng. Các biến r và s được khai báo trong test_function () vì vậy chỉ có thể được sử dụng bên trong hàm đó. Tuy nhiên, s đang tĩnh không bị phá hủy cho đến khi chương trình kết thúc. Khi test_function () được gọi là lần đầu tiên, r được khởi tạo đến 5 và giá trị của s là 10 được tính từ khai báo

s = s + r * 2;

Sau khi chấm dứt test_function () , r bị phá hủy nhưng s vẫn giữ 10. Khi được gọi lần thứ hai, r được tạo ra và khởi tạo lại 5 lần.

Kết quả

Inside test_function g = 25 s = 10 r = 5 Inside main a = 17 g = 25 Inside test_function g = 25 s = 20 r = 5 5. Lớp lưu trữ có thể thay đổi (Mutable Storage Class)

Trong C + +, một lớp đối tượng có thể được giữ liên tục một giá trị bằng cách sử dụng từ khoá const. Điều này không cho phép các hàm thay đổi giá trị của đối tượng trong quá trình thực hiện chương trình. Tuy nhiên, có những trường hợp khi một số dữ liệu của đối tượng hằng số này phải được thay đổi. Trong những trường hợp này, chúng ta có thể làm cho các biến này biến đổi được bằng cách sử dụng một lớp lưu trữ có thể thay đổi .

Cú pháp mutable datatype var_name1; Ví dụ , mutable int x; mutable char y; Ví dụ Tạo một biến có thể thay đổi

using namespace std;

class test { mutable int a; int b; public: test(int x,int y) { a=x; b=y; } void square_a() const { a=a*a; } void display() const { cout<<“a = “<<a<<endl; cout<<“b = “<<b<<endl; } };

int main() { const test x(2,3); cout<<“Initial value”<<endl; x.display(); x.square_a(); cout<<“Final value”<<endl; x.display(); return 0; } Kết quả

Initial value a = 2 b = 3 Final value a = 4 b = 3

Lớp(Class) Và Đối Tượng Trong C++

Mục đích chính của C++ là bổ sung thêm tính hướng đối tượng (object) cho Ngôn ngữ lập trình C và các Lớp (class) là tính năng trung tâm của C++ mà hỗ trợ lập trình hướng đối tượng và thường được gọi là các kiểu người dùng tự định nghĩa (user-defined).

Một lớp được sử dụng để xác định form của một đối tượng và nó kết nối sự biểu diễn dữ liệu và các phương thức để thao tác các dữ liệu đó vào trong một package gọn gàng. Dữ liệu và hàm bên trong một lớp được gọi là các thành viên của lớp đó.

Định nghĩa Lớp trong C++

Khi bạn định nghĩa một lớp, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều này không thực sự định nghĩa bất kỳ dữ liệu nào, nhưng nó định nghĩa ý nghĩa tên lớp là gì, đó là, những gì một đối tượng của lớp đó sẽ bao gồm và những hoạt động nào có thể được thực hiện trên một đối tượng đó.

Một định nghĩa lớp trong C++ bắt đầu với từ khóa class, được theo sau bởi tên lớp và phần thân lớp, được bao quanh trong một cặp dấu ngoặc móc. Một định nghĩa lớp phải được theo sau: hoặc bởi một dấu chấm phảy hoặc một danh sách các khai báo. Ví dụ, chúng ta định nghĩa kiểu dữ liệu Box bởi sử dụng từ khóa class trong C++ như sau:

class Box { public: double chieudai; double chieurong; double chieucao; };

Từ khóa public quyết định các thuộc tính truy cập của các thành viên lớp mà theo sau nó. Một thành viên public có thể được truy cập từ bên ngoài lớp bất cứ đâu bên trong phạm vi (scope) của đối tượng lớp đó. Bạn cũng có thể xác định các thành viên của lớp là private hoặc protected sẽ được bàn luận trong chương phụ.

Định nghĩa Đối tượng trong C++

Một lớp cung cấp các blueprint cho các đối tượng, vì thế về cơ bản, một đối tượng được tạo từ một lớp. Chúng ta khai báo các đối tượng của một lớp giống đúng như chúng ta khai báo các biến của kiểu cơ bản. Các lệnh sau khai báo hai đối tượng của lớp Box:

Box Box1; Box Box2;

Cả hai đối tượng Box1 và Box2 sẽ có bản sao của các thành viên dữ liệu (Data Member) riêng.

Truy cập các thành viên dữ liệu trong C++

Các thành viên dữ liệu public của các đối tượng của một lớp có thể được truy cập bởi sử dụng toán tử truy cập thành viên trực tiếp là dấu chấm (.). Bạn sẽ thấy rõ ràng khi xem ví dụ sau:

using namespace std; class Box { public: double chieudai; double chieurong; double chieucao; }; int main( ) { Box Box1; Box Box2; double thetich = 0.0; Box1.chieucao = 4.5; Box1.chieudai = 2.2; Box1.chieurong = 1.5; Box2.chieucao = 3.2; Box2.chieudai = 4.5; Box2.chieurong = 2.3; thetich = Box1.chieucao * Box1.chieudai * Box1.chieurong; cout << "The tich cua Box1 la: " << thetich <<endl; thetich = Box2.chieucao * Box2.chieudai * Box2.chieurong; cout << "The tich cua Box2 la: " << thetich <<endl; return 0; }

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Điểm quan trọng cần nhớ là: các thành viên private và protected không thể được truy cập một cách trực tiếp bởi sử dụng toán tử truy cập thành viên trự tiếp này. Chúng ta sẽ học cách các thành viên private và protected có thể được truy cập.

Chi tiết về Lớp & Đối tượng trong C++

Hàm friend được cho phép truy cập tới các thành viên là private và protected của một lớp

Mỗi đối tượng có một con trỏ this đặc biệt, mà trỏ tới chính đối tượng đó

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng….miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile…. mới nhất của chúng tôi.

Bài học C++ phổ biến khác tại vietjack.com:

Cập nhật thông tin chi tiết về Lớp Và Phương Thức Trong C# (Bài 5) trên website 2atlantic.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!