c++类的小知识(三)



#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关键字可以被用于参与对重载函数的区分。

猜你喜欢

转载自blog.csdn.net/chenlj_1/article/details/79764411