目录
一、关键字public、private、protected的作用
一、关键字public、private、protected的作用
在C++中,关键字public
、private
和protected
用于定义类的成员变量和成员函数的访问权限。它们的作用如下:
public
:公共成员,可以被类内部的任意函数、对象、以及类的外部访问。private
:私有成员,只能被当前类的成员函数访问,类外部无法直接访问。protected
:保护成员,只能被当前类及其子类的成员函数访问,类外部无法直接访问。
以下是一个示例代码,对于其中的每个访问权限关键字进行了详细的注释:
#include <iostream>
class MyClass {
public:
// 公共成员函数,可以被任意对象和类外部访问
void publicFunc() {
std::cout << "This is a public function" << std::endl;
}
protected:
// 受保护的成员变量,只能被当前类及其子类访问
int protectedVar;
// 受保护的成员函数,只能被当前类及其子类访问
void protectedFunc() {
std::cout << "This is a protected function" << std::endl;
}
private:
// 私有成员变量,只能被当前类的成员函数访问
int privateVar;
// 私有成员函数,只能被当前类的成员函数访问
void privateFunc() {
std::cout << "This is a private function" << std::endl;
}
};
class MyDerivedClass : public MyClass {
public:
// 子类的公共成员函数,可以被任意对象和类外部访问
void derivedPublicFunc() {
std::cout << "This is a derived public function" << std::endl;
// 可以访问基类的保护成员变量
protectedVar = 10;
// 可以调用基类的保护成员函数
protectedFunc();
}
};
int main() {
MyClass myObj;
// 可以调用公共成员函数
myObj.publicFunc();
// 下面两行代码都会导致编译错误,因为 private 和 protected 成员无法在类外部访问
// myObj.privateVar;
// myObj.privateFunc();
MyDerivedClass derivedObj;
// 可以调用公共成员函数
derivedObj.derivedPublicFunc();
// 下面两行代码都会导致编译错误,因为 private 成员无法在子类中访问
// derivedObj.privateVar;
// derivedObj.privateFunc();
// 可以访问基类的保护成员变量
derivedObj.protectedVar = 20;
// 可以调用基类的保护成员函数
derivedObj.protectedFunc();
return 0;
}
二、构造函数的定义
构造函数是一种特殊的函数,用于在创建对象时初始化对象的成员变量或进行一些其他的初始化操作。构造函数的名称与类的名称相同,并且不需要返回值类型,也不能手动调用。当创建一个新的对象时,编译器会自动调用该对象对应的构造函数。
以下是一个简单的示例,演示如何定义和使用构造函数:
#include <iostream>
// 定义名为 MyClass 的类
class MyClass {
public:
// 构造函数,接受一个 int 类型参数 value
MyClass(int value) {
_value = value;
// 输出一条消息,表示一个新的对象被创建了,并打印出对象的值
std::cout << "A new object is created with value " << _value << std::endl;
}
// 成员函数,用于打印出对象的值
void printValue() {
std::cout << "The value of this object is " << _value << std::endl;
}
private:
int _value; // 私有变量 _value,用于存储对象的值
};
// 主函数
int main() {
// 创建一个 MyClass 类型的对象,传入参数值为 10
MyClass myObj(10);
// 调用对象的成员函数 printValue(),输出对象的值
myObj.printValue();
return 0;
}
在上面的示例中,MyClass
类定义了一个构造函数MyClass(int value)
,用于初始化成员变量_value
。当创建一个新的MyClass
对象时,会自动调用构造函数,并将传入的参数赋值给_value
。在main
函数中,创建了一个新的MyClass
对象,并输出了它的值。