前言
软件为visual studio2017,内容为C++学习笔记,以及相关的问题处理方法,目的是方便回顾和复习。
笔记来自于:黑马程序员C++教程。
一、对象特性-成员变量和成员函数分开存储
- 在C++中,类内的成员变量和成员函数是分开存储
- 只有非静态的成员变量才属于类的对象上。
- 其余的静态变量、成员函数和静态成员函数均不属于对象上。
1、代码示例
#include <iostream>
using namespace std;
#include <string>
//成员变量和成员函数分开存储
class Person {
int m_A;//非静态的成员变量
static int m_B;//静态成员变量 不属于类对象上 添加后,对象的所占的内存空间大小不变
void func() {
};//非静态成员函数 不属于类对象上 添加后所占的内存空间大小不变
static void func01() {
};//静态的成员函数 不属于类对象上 添加后所占的内存空间大小不变
};
void test01() {
Person p;
//空对象占用的内存空间为:1
//C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置。
//每个对象都要占用一块内存空间。
//每一个空对象也应该有一个独一无二的内存地址
cout << "对象p所占用的内存为:" << sizeof(p) << endl;
}
void test02() {
Person p;//非空的对象所占的内存空间为4
cout << "对象p所占的内存为:" << sizeof(p) << endl;
}
int main() {
test02();
system("pause");
return 0;
}
二、this指针概念
1.基础概念
- C++中的成员变量和成员函数是分开存储的。
- 每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码。
- 问题是:
这一块代码是如何区分哪个对象调用自己的那?
- 解决方案:
C++通过提供特殊的对象指针,this指针解决上述问题。
2.this指针
this指针指向
被调用的成员函数所属的对象
。- this指针是隐含在每一个非静态成员函数内的一种指针。
- this指针无需定义,直接使用即可。
3.this指针的用途
- 当形参和成员变量
同名
时,可用this指针
来区分
。 - 在类的非静态成员函数中
返回对象本身
,可使用return *this
。
4.代码示例
#include <iostream>
using namespace std;
#include <string>
class Person {
public:
//构造函数
// 1、解决名称冲突
Person(int age) {
//this指针指向 被调用的成员函数 所属的对象。
this->age = age;//赋值操作
}
//2、返回对象本身用*this
Person personAddage(Person &p) {
this->age += p.age;
//this指向p2的指针,*this指向的就是p2;
return *this;
//返回的类型是值的时候,此时为拷贝构造函数,是*this为基础拷贝构造的一份新的数据。
}
//返回本体就用引用的方式进行返回。
//函数返回的对象是Person &引用,是一个常量指针,