Getters and Setters in C++


Getters and setters are special methods in C++ used to access and modify private or protected data members of a class. They provide controlled access to class members, allowing developers to implement validation, formatting, or other logic when getting or setting a value.

Why Use Getters and Setters?

In C++, data members of a class are often declared as private to enforce the principle of data hiding. Getters and setters allow external code to interact with these private members while maintaining control over how the data is accessed or modified.

Basic Example

Here is a simple example of using getters and setters:

    #include <iostream>

    class Student {
    private:
        std::string name;
        int age;

    public:
        // Setter for name
        void setName(const std::string& studentName) {
            name = studentName;
        }

        // Getter for name
        std::string getName() const {
            return name;
        }

        // Setter for age
        void setAge(int studentAge) {
            if (studentAge > 0) {
                age = studentAge;
            }
        }

        // Getter for age
        int getAge() const {
            return age;
        }
    };

    int main() {
        Student student;
        student.setName("Alice");
        student.setAge(20);

        std::cout << "Name: " << student.getName() << std::endl;
        std::cout << "Age: " << student.getAge() << std::endl;

        return 0;
    }
        

Output:

    Name: Alice
    Age: 20
        

In this example, the setName and setAge methods allow controlled modification of the private data members name and age. Similarly, getName and getAge provide access to these members.

Using Getters and Setters for Validation

Getters and setters can also include validation logic to ensure that data remains consistent:

    #include <iostream>

    class BankAccount {
    private:
        double balance;

    public:
        BankAccount() : balance(0) {}

        // Setter with validation
        void setBalance(double newBalance) {
            if (newBalance >= 0) {
                balance = newBalance;
            } else {
                std::cout << "Invalid balance value.\n";
            }
        }

        // Getter
        double getBalance() const {
            return balance;
        }
    };

    int main() {
        BankAccount account;
        account.setBalance(500);
        std::cout << "Balance: " << account.getBalance() << std::endl;

        account.setBalance(-100); // Attempt to set an invalid value
        std::cout << "Balance: " << account.getBalance() << std::endl;

        return 0;
    }
        

Output:

    Balance: 500
    Invalid balance value.
    Balance: 500
        

In this example, the setBalance method prevents invalid values from being assigned to the balance member.

Benefits of Getters and Setters

  • Encapsulation: Keeps data members private while allowing controlled access.
  • Validation: Ensures that only valid data is assigned to class members.
  • Flexibility: Allows modification of the underlying implementation without changing the interface.
  • Debugging: Makes it easier to track and debug changes to class members.

Conclusion

Getters and setters are essential tools in C++ for accessing and modifying private or protected data members. By using them, developers can enforce encapsulation, add validation, and maintain control over how class data is used. This results in more robust and maintainable code.





Advertisement