成员变量和成员函数分开存储
Posted boyboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成员变量和成员函数分开存储相关的知识,希望对你有一定的参考价值。
-
当创建 一个空对象,空对象也占有一个字节的空间,目的是为了区分空对象所占内存的位置
-
class person
void text()
person p;
sizeof(p); -
非静态成员变量由类型所占的字节数有关,不属于类对象上
-
静态成员变量是不属于类对象上
-
静态成员函数不属于类对象上
this指针
-
this指针指向被调用的成员函数所属的对象
-
每一个非静态成员都有this指针,无需书写
this指针的作用
class person
public:
person(int age)
this->age=age;//由this的定义指向的是p1.
int age;
void text()
person p1(15);
-
可利用*this返回对象的本体,实现链式编程思想
-
链式this的返回值是引用,引用直接返回对象。不返回引用则会复制一份数据,返回的不是原来的对象
空指针可以调用成员函数
-
令对象为空
-
class person
public:
void shouperson()
cout<<"校长"<<endl;
void shouperson02()
if(this==NULL)
return ;
cout<<m_age<<endl;//这里默认一个this->m_age;调用时this指向了空指针
int m_age;
;
void test()
person *p=NULL;
const修饰成员函数
-
常函数
-
成员函数后加入const
-
成员函数属性的声明前加入关键字mutable后,常函数中依然可以修改
-
//在类中
class person
public:
void shouperson()const
this->m_a=100;//const下的this的指向不可以改变,属于指针常量。 -
class person
public:
int m_age;
mutable int m_b;
-
-
常对象
-
声明对象前加入const称该对象为常对象,也是不可以属性也是不可以修改的。
-
常对象只能调用常函数,就是都加const
class person
public:
void person(int age)const
m_age=age;
int m_age;
;
int main()
const person p(10);//常对象
-
函数指针成员变量
【中文标题】函数指针成员变量【英文标题】:function pointer member variable 【发布时间】:2020-09-11 15:53:42 【问题描述】:我在 double ()(double) 类型的类中有一个成员变量,但是有些函数 id 喜欢存储,它们有第二个默认参数,所以它们是 double ()(double , double) 所以我不能将它存储在我当前的成员变量中。
我是否可以将我的成员变量设为双精度 ()(double, double),以便它也可以存储 ()(double)?有什么不同的方法可以完成我想要的吗?或者在使用 2 个参数 vs 1 个参数的情况下,我需要 2 个不同的变量吗?
【问题讨论】:
请显示您所指的代码,而不是仅仅描述它。 【参考方案1】:你需要两个变量。调用中的参数数量必须与函数指针变量中的参数数量相匹配,因此您不能将同一个变量用于不同数量的参数。
如果您一次只需要其中一个,则可以通过使用联合来节省结构中的空间。
double somefunc(double);
double otherfunc(double, double);
struct mystruct
union
double(*onearg)(double);
double(*twoarg)(double, double);
func
// other members
;
mystruct obj;
obj.func.onearg = somefunc;
double foo = obj.func.onearg(1.2);
obj.func.twoarg = otherfunc;
double bar = obj.func.twoarg(2.5, 11.1);
【讨论】:
这正是我想要做的!请您解释一下这是如何节省空间的?我以前从未使用过联合。 联合对两个成员使用相同的内存。你只能阅读你写给它的最后一个成员。以上是关于成员变量和成员函数分开存储的主要内容,如果未能解决你的问题,请参考以下文章