c++类和对象一对象特性一成员变量和成员函数分开存储

简介: c++类和对象一对象特性一成员变量和成员函数分开存储

在C++中,类的成员变量和成员函数是分开存储的。成员变量是类的属性,它们代表了类的状态或数据;而成员函数是类的行为,它们定义了类可以执行的操作。在内存中,成员变量通常存储在类的实例(对象)中,而成员函数则存储在代码段中,并且与类关联。

 

成员变量

成员变量是类的属性,它们与类的每个对象相关联。当创建类的对象时,会在堆内存中为该对象的成员变量分配空间。每个对象都有自己独立的成员变量副本,这意味着修改一个对象的成员变量不会影响到其他对象的成员变量。

 

成员函数

成员函数是类的行为,它们定义了类可以执行的操作。成员函数通常存储在代码段中,并且与类关联。无论创建多少个类的对象,成员函数只存储一次。当调用对象的成员函数时,会传递对象的指针(或引用)作为隐式参数,以便函数能够访问和修改对象的成员变量。

 

示例代码

下面是一个简单的C++类示例,演示了成员变量和成员函数的分开存储:

image.png

image.png

在上面的代码中,Person 类有两个成员变量:name 和 age,以及一个成员函数 display()。当创建 person1 和 person2 这两个对象时,它们的成员变量 name 和 age 分别在各自的堆内存空间中存储。而成员函数 display() 则只存储一次在代码段中,并且可以被所有 Person 类的对象共享。

 

成员变量和成员函数的访问

成员变量通常通过成员函数进行访问和修改,以封装类的内部状态。这样做可以提供更好的数据安全性,防止外部代码直接访问和修改成员变量,从而避免潜在的问题。

 

在上面的示例中,display() 成员函数可以访问私有成员变量 name 和 age,并将它们打印到控制台。由于 name 和 age 是私有的,因此外部代码不能直接访问它们,只能通过 display() 成员函数间接访问。

 

总结

C++中的类和对象通过分开存储成员变量和成员函数来实现封装性。成员变量存储在对象的实例中,而成员函数存储在代码段中,并且与类关联。这种分开存储的方式使得每个对象都有自己独立的成员变量副本,而成员函数则可以被所有对象共享。通过成员函数访问和修改成员变量,可以提供更好的数据安全性。

目录
相关文章
|
4天前
|
存储 编译器 C语言
【C++基础 】类和对象(上)
【C++基础 】类和对象(上)
|
12天前
|
存储 编译器 C语言
【C++】string类的使用①(默认成员函数
本文介绍了C++ STL中的`string`类,它是用于方便地操作和管理字符串的类,替代了C语言中不便的字符数组操作。`string`基于`basic_string`模板,提供类似容器的接口,但针对字符串特性进行了优化。学习资源推荐[cplusplus.com](https://cplusplus.com/)。`string`类提供了多种构造函数,如无参构造、拷贝构造、字符填充构造等,以及析构函数和赋值运算符重载。示例代码展示了不同构造函数和赋值运算符的用法。
|
12天前
|
编译器 C++
【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)
📚 C++ 知识点概览:探索类的`static`成员、友元及应用🔍。
|
12天前
|
算法 C++ 容器
|
12天前
|
存储 安全 编译器
|
4天前
|
设计模式 安全 编译器
【C++11】特殊类设计
【C++11】特殊类设计
22 10
|
9天前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
40 9
|
12天前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以'\0'结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加'\0'。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
12天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `<`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
12天前
|
C++
【C++】string类的使用④(常量成员Member constants)
C++ `std::string` 的 `find_first_of`, `find_last_of`, `find_first_not_of`, `find_last_not_of` 函数分别用于从不同方向查找目标字符或子串。它们都返回匹配位置,未找到则返回 `npos`。`substr` 用于提取子字符串,`compare` 则提供更灵活的字符串比较。`npos` 是一个表示最大值的常量,用于标记未找到匹配的情况。示例代码展示了这些函数的实际应用,如替换元音、分割路径、查找非字母字符等。