十一.C++ 类 -- 面向对象思想

类的定义

class/struct 类名 : 继承方式,基类...{

类名(行参表):成员变量(初值)...{

函数体;

}

~类名(void){

函数体;

}

返回类型 函数名 (形参表) 常属性 异常说明{

函数体;

}

数据类型 变量名;

}

访问控制限定符

  • public 共有成员 谁都可以访问

  • private 私有成员 只有自己可以访问

  • protected 保护成员,只有自己和子类可以访问

成员变量

成员变量在对象中存着

成员函数

成员函数在代码端储存

cpp 复制代码
class Human
{
public:
    Human();
    ~Human();
    
	void setInfo(int age,const char* name)
	{
    	m_age = age;
    	strcpy_s(m_name, name);

	};

	void getInfo()
	{
    	cout << "age = " << m_age << " name = " << m_name << endl;
	};

private:
	 int age;
 	 char name[256];
};

Human::Human()
{
}

Human::~Human()
{
}

int main()
{
     Human h;

 	h.setInfo(20, "wyd");

 	h.getInfo();   // age = 20 name = wyd
}

This指针

C++成员函数模型

  • 类的每个成员函数(除静态成员函数外),都有一个隐藏的指针型参数,形参名为this,指向调用该成员函数的对象,这就是this指针

  • 在类的成员函数中(除静态成员函数外),对所有成员的访问,都是通过this指针进行的

cpp 复制代码
void setInfo(/* 隐藏一个 Human* this指针 */int age,const char* name)
	{
    	m_age = age;
    	strcpy_s(m_name, name);

	};

void getInfo(/* Human* this */)
	{
    	cout << "age = " << m_age << " name = " << m_name << endl;
	};

可以用另外一种写法证明:

cpp 复制代码
void setInfo(/* 隐藏一个 Human* this指针 */int age,const char* name)
 {
     this->age = age;
     strcpy_s(this->name, name);

 };

 void getInfo(/* Human* this */)
 {
     cout << "age = " << this->age << " name = " << this->name << endl;
 };
this指针的应用(必须自己使用this的情况)
  • 多数情况下,程序并不需要显式的使用指针this

  • 有时为了方便,将类的成员变量与该成员函数的参数相同标识符,这时在成员函数内部,可以通过this指针将两者加以区分

cpp 复制代码
void setInfo(int age,const char* name)
 {
     this->age = age;
     strcpy_s(this->name, name);

 };

 void getInfo()
 {
     cout << "age = " << this->age << " name = " << this->name << endl;
 };


private:
	 int age;
 	 char name[256];
};
  • 返回基于this指针的自引用,以支持串连调用
cpp 复制代码
Human& increment()
{
    ++age;

    return *this;
}

h.increment();

h.getInfo();   // age = 21 name = wyd
  • 将this指针作为函数的参数,以实现对象交互
相关推荐
飞Link5 分钟前
【AI大模型实战】万字长文肝透大语言模型(LLM):从底层原理解析到企业级Python项目落地
开发语言·人工智能·python·语言模型·自然语言处理
妙蛙种子3115 分钟前
【Java设计模式 | 创建者模式】 原型模式
java·开发语言·后端·设计模式·原型模式
LlNingyu11 分钟前
Go 实现无锁环形队列:面向多生产者多消费者的高性能 MPMC 设计
开发语言·golang·队列·mpmc·数据通道
旖-旎11 分钟前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
Lyyaoo.13 分钟前
【JAVA基础面经】线程的状态
java·开发语言
John.Lewis15 分钟前
C++进阶(8)智能指针
开发语言·c++·笔记
無限進步D29 分钟前
蓝桥杯赛前刷题
c++·算法·蓝桥杯·竞赛
小贾要学习29 分钟前
【Linux】应用层自定义协议与序列化
linux·服务器·c++·json
CoderCodingNo30 分钟前
【GESP】C++二级真题 luogu-B4497, [GESP202603 二级] 数数
开发语言·c++·算法
ss27331 分钟前
致Java初学者的一封信
java·开发语言