p2p网站建设 深圳,盐山县做网站价格,客户跟进系统 免费,阳西网站建设成员变量和成员函数分开存储#xff1a;基本概念#xff1a;在C中#xff0c;类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上每个空对象都会有一个独一无二的内存地址#xff0c;所以#xff0c;空对象占用内存空间的大小为1代码实现#xff1a;#i…成员变量和成员函数分开存储基本概念在C中类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上 每个空对象都会有一个独一无二的内存地址所以空对象占用内存空间的大小为1代码实现#include iostream
using namespace std;//成员变量和成员函数 分开存储
class Person
{int m_A;//非静态成员变量属于类的对象上static int m_B;//静态成员变量,不属于类对象上void func()//非静态成员函数,不属于类对象上{;}static void func2()//静态成员函数不属于类对象上{;}
};
int Person::m_B 0;
void test01()
{Person p;//空对象 占用内存空间为 1 //C 编译器会给每个空对象也分配一个字节的空间 是为了区别空对象占内存的位置cout size of p sizeof(p) endl;
}
void test02()
{Person p;cout size of p sizeof(p) endl;
}
int main()
{test01();test02();system(pause);return 0;
}this 指针概念我们知道在C中成员变量和成员函数是分开存储的每一个非静态成员函数只会诞生一份函数实例也就是说每个同类型的对象会共用一块代码 C通过提供特殊的对象指针this指针this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针this指针不需要定义直接使用即可 this指针的用途在形参和成员变量同名时可用this指针来区分在类的非静态成员函数中返回对象本身可使用return *this代码#include iostream
using namespace std;
class Person
{
public:Person(int age){//this指针指向 被调用的成员函数 所属的对象this-age age;}Person PersonAddAge(Person p){this-age p.age;//this指向p2的指针而*this指向的就是p2这个对象本体return *this;}int age;};
//1.解决名称冲突
void test01()
{Person p1(18);cout p1的年龄为 p1.age endl;
}
//2.返回对象本身用*this
void test02()
{Person p1(10);Person p2(10);p2.PersonAddAge(p1);cout p2的年龄 p2.age endl;//链式编程思想 p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);cout p2的年龄 p2.age endl;
}int main()
{test01();test02();system(pause);return 0;
}空指针访问成员函数:C中空指针也是可以调用成员函数的但是也要注意有没有用到this指针 如果用到this指针需要加以判断保证代码的健壮性代码#define _CRT_SECURE_NO_WARNINGS
#include iostream
using namespace std;
//空指针调用成员函数class Person
{
public:void showClassName(){cout this is Person class endl;}void showPersonAge(){//报错的原因是因为传入的指针为NULLif (this NULL){return;}cout age this-m_Age endl;}int m_Age;
};
void test01()
{Person* p NULL;p-showClassName();p-showPersonAge();}int main()
{test01();system(pause);return 0;
}const修饰成员函数:常函数: ●成员函数后加const后我们称为这个函数为常函数●常函数内不可以修改成员属性●成员属性声明时加关键字mutable后,在常函数中依然可以修改常对象:●声明对象前加const称该对象为常对象●常对象只能调用常函数代码:#include iostream
using namespace std;//常函数
class Person
{
public://this指针的本质 是指针常量 指针的指向是不可以修改的//const Person * const this//在成员函数后面加上const修饰的是this的指向让指针指向的值也不可以修改void showPerson() const {this-m_B 100;//this NULL;//this指针是不可以修改指针的指向的}void func(){}int m_A;mutable int m_B;//特殊变量即使在常函数中也可以修改这个值,加上关键字mutable这个const的指向可以修改};void test01()
{Person p;p.showPerson();
}
//常对象void test02()
{const Person p;//在对象前加const变为常对象//p.m_A 100;//修改不了p.m_B 100;//m_B是特殊值在常对象下也可以修改//常对象只能调用常函数//p.func();//无法调用因为这个函数不是常函数//常对象 不可以调用普通成员函数因为普通成员函数可以修改属性
}
int main()
{test01();test02();system(pause);return 0;
}