对象的属性和行为在c++中分别对应类的成员变量和成员函数,区分依据是定义位置、访问方式及内存/调用机制;属性常置于private/protected区,行为多置于public区以符合封装惯例。

对象的属性和行为在 C++ 中本质就是类里的成员变量和成员函数,区分它们不靠语法关键词,而靠定义位置、访问方式和内存/调用机制。
看声明位置和访问权限修饰符
属性(成员变量)通常出现在 private 或 protected 区域,行为(成员函数)多放在 public 区域——这不是硬性规定,但符合封装惯例。比如:
class Student {
private:
string m_name; // 属性:被保护,外部不能直接读写
int m_id;
public:
void set_name(string n) { m_name = n; } // 行为:提供对外接口
void print() { cout
<p>注意:<code>m_name</code> 是变量名,<code>set_name</code> 是函数名,名字本身常带提示(如 <code>m_</code> 前缀、<code>get_</code>/<code>set_</code> 前缀),但这只是约定,编译器不强制。</p>
<h3>看调用方式和 this 指针隐含传递</h3>
<p>行为必须通过对象(或指针/引用)调用,且每次调用都会自动传入 <code>this</code> 指针;属性则可直接通过点号或箭头访问,但仅限于有访问权限时:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2823" title="C++14"><img
src="https://img.php.cn/upload/manual/001/431/639/6ac8b33c327c4749.png" alt="C++14" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="overflowclass">C++14</a>
<p class="overflowclass">C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
-
s1.m_name—— 直接访问属性(需public权限) -
s1.print()—— 调用行为,编译器实际转成print(&s1) -
s1.set_name("Alice")—— 行为内部通过this->m_name修改自身属性
静态成员例外:Student::s_count(静态变量)和 Student::create()(静态函数)不依赖具体对象,也无 this。
看内存布局和生命周期
属性是对象的一部分,每个对象实例都有一份独立拷贝,存于栈或堆上;行为是代码,所有对象共享同一份函数体,存于代码段:
-
Student s1, s2;→s1.m_name和s2.m_name是两块不同内存 -
s1.print()和s2.print()调用的是同一段机器码 - 若属性是
static(如static int s_total;),它不属于任何对象,而是属于整个类,全局唯一
容易忽略的一点:没有 public 修饰的类成员默认是 private,所以即使你写了 string name; 在 class 里没加访问符,它也是私有属性,不能直接用 obj.name 访问。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










