扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
class A { public: int foo( ) { return val ; } static int staFun( ) { return staVal ; } static int staVal ; private: int val ; char bit1 ; } ; class B : public A { public: char foo( ) { return bit2; } private: char bit2 ; };成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于做网站、网站制作、崇明网络推广、成都小程序开发、崇明网络营销、崇明企业策划、崇明品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联为所有大学生创业者提供崇明建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
静态数据成员:
它被编译器提出于class之外,并被视为一个global变量(但只在class生命范围之内可见)
每个静态数据成员只有一个实体,存放在程序的数据段之中,
经由’.’运算符,对一个静态数据成员进行存取操作,只是语法上的一种便宜行事而已。静态数据成员其实并不在class object之中,因此存取它并不需要通过class object。
虽然你可以不靠class object 来存取一个静态成员,但其存取函数却得绑定于一个class object之上。(若静态成员的访问控制为protected或private,则必须通过存取函数来访问)
【注意:】类的静态数据成员,必须要在全局下进行定义,然后才能使用。
无论它的访问控制是什么,必须在main函数之前,对静态数据成员定义。
例如:int A::staVal = 0 ;
否则,编译器会报错:未定义的引用。
因为编译器把涉及静态数据成员的使用,都转换为直接使用,而静态成员在class中声明,外部无法看见。故需要在外部进行定义,使其后的代码可见。
成员函数的处理:
C++的设计准则之一:非静态成员函数至少和一般的外部函数有相同的存储效率。
C++编译器会把成员函数内化为一般的函数:
①改写函数原型,安插一个额外的参数this指针。用以提供一个存取管道,使类对象得以调用该函数。
int A::foo (A* const this)
若该成员函数是const,则变成:
int A::foo (const A* const this)
②对函数体中 类对象的非静态数据成员的存取操作,改为经由this指针来存取。
int A::foo (A* const this)
{ return this->val ; }
③将成员函数重新写成一个外部函数,对函数名称进行处理,使它在程序中成为独一无二的。
以上的转换操作结束之后,每个调用操作都要转换。
A objA ; A * ptr = & objA ; ptr->foo( ) ; objA.foo() ; //分别被转换为: foo_intA( ptr ) ; foo_intA( & objA ) ;
静态成员函数:
静态成员函数的主要特征是它没有this指针。
故其:
①它不能够直接存取其class中的非静态成员
②它不能够直接被声明为const、virtual
③它不需要经由class object才被调用——虽然大部分时候它是这样被调用的。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流