class Person
{
int m_A;//非静态成员变量 属于类的对象上
static int m_B;//静态成员变量 不属于类对象上
void func() {} //非静态成员函数 不属于类对象上
static void func2() {};//静态成员函数 不属于类的对象上
};
#include<iostream>
#include<string>
using namespace std;
class Person
{
int m_A;//非静态成员变量 属于类的对象上
static int m_B;//静态成员变量 不属于类对象上
void func() {} //非静态成员函数 不属于类对象上
static void func2() {};//静态成员函数 不属于类的对象上
};
//不是空类型的时候就是本身的大小(只要是空的就是占用一个字节,不是空就按照int 分配4个字节)
void test01()
{
Person p;
//空对象占用内存空间为:0 4 1(正确结果为1)
//C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
//每个空对象也应该有一个独一无二的内存地址
cout << "size of p:" << sizeof(p) << endl;
}
int main(void)
{
test01();
system("pause");
return 0;
}
this指针是隐含在每一个非静态成员函数内的一种指针
this的用途:
当形参和成员白能量同名时,可以用this指针来区分
在类的非静态成员函数中返回对象本身,可以使用return *this
看看下面的这个例子:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(int age)
{
age = age;
}
int age;
};
void test01()
{
Person p1(18);
cout << "p1的年龄为:" << p1.age << endl;
}
int main(void)
{
test01();
system("pause");
return 0;
}
其实输出的结果并不是我们认为的18
但是当加上this->以后,出现的结果就不一样了
这一次就不出现上面的错误了
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
int age;
};
void test01()
{
Person p1(18);
cout << "p1的年龄为:" << p1.age << endl;
}
int main(void)
{
test01();
system("pause");
return 0;
}
p2指向p2的指针,而*this指向的就是p2这个对象本体。
注意:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(int age)
{
this->age = age;
}
Person& PersonAddAge(Person &p) //如果需要返回本体,就要使用Person&
{
this->age += p.age;
//this指向p2的指针,而*this指向的就是p2这个对象的本体
return *this;
}
int age;
};
void test01()
{
Person p1(18);
cout << "p1的年龄为:" << p1.age << endl;
}
//返回对象本身用*this
void test02()
{
Person p1(10);
Person p2(10);
//链式编程思想
p2.PersonAddAge(p1).PersonAddAge(p1);//这样就可以输出10 + 10 = 20//于是我想多加几次
cout << "p2的年龄为:" << p2.age << endl;
}
int main(void)
{
test02();
system("pause");
return 0;
}
报错原因是传入的指针是为NULL
加入下面这些代码就可以避免出现错误
常函数
class Person
{
public:
void showPerson()
{
m_A = 100;
}
int m_A;
};
这里m_A可以进行赋值修改
假如,不想修改,可以在后面加上const