#include <stdio.h>
#include<iostream>
using namespace std;
class Test
{
char name[10];
public:
static int m_sum;
Test(char *p);
static int GetSum();
};
int Test::m_sum=0;
Test::Test(char *p)
{
strcpy(name,p);
m_sum++;
}
int Test::GetSum()
{
return m_sum;
}
int main()
{
Test s1("test1");
Test s2("test2");
Test s3("test3");
cout<<"sum="<<s1.GetSum()<<endl;
cout<<"Test::m_sum= "<<Test::m_sum<<endl;
cout<<"Test::GetSum()="<<Test::GetSum()<<endl;
return 0;
}
答案为
sum=3
Test::m_sum= 3
Test::GetSum()3
static类的静态数据成员,对于同类的多个对象来说,静态数据成员只占用一份存储空间,由所有的对象共享。若某个对象对静态数据成员做了修改,则其他对象的静态数据成员也同时被修改。
#include <stdio.h>
#include<iostream>
using namespace std;
class Test
{
const int m_a;
public:
Test(int a):m_a(a){};
int GetA() const;
};
int Test::GetA() const
{
return m_a;
}
int main()
{
Test p(2);
cout<<"m_a="<<p.GetA()<<endl;
return 0;
}
答案
m_a=2
(1)如果常成员函数在类内说明类外定义,则在函数的实现部分也要带const关键字。
(2)常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数,这样就保证了在常成员函数中绝对不会更新数据成员的值。
(3)如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他成员函数。
(4)const关键字可以被用于参与对重载函数的区分。