C++之各类特殊成员

Posted 是小臻吖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之各类特殊成员相关的知识,希望对你有一定的参考价值。

hello,又见面咯,一日不见,如隔三秋.


1.5“最后的晚餐之析构函数

作用:用于释放内存

定义: ~Human();

    Human::~Human(){

        delete addr;

}

这个函数比较简单,不能主动调用 ,所以只要写释放内存的代码即delete就行了.

1.6永不迷失的真爱:this指针

首先this指针是指向对象的,因此在静态函数方法中无效哦.

下面介绍一些使用:

eg1.在构造函数中使用.(上一篇推文中有例如this->name=name等代码)

eg2.当返回一个类时.

如:Human &Human ::compare(Human &other){

                                ........

        return *this

}

ps: &为引用,当参数返回的是引用时this前要加*;

若使用指针:

Human* Human::compare1(const Human * other) {

      if (age > other->age) {

            return this; //没有创建新的对象

      }

      else {

 

            returnother;

      }

}

然后我们来讲一讲类文件的分离.如在第一篇推文中的代码,我们感觉太长了,需要建立以下文件:

头文件(.h):class定义+include<...>

与头文件名相同的源文件:include<..>+各种函数的定义

源文件:#include<..>+main主方法


言归正传下面我们来学习各类特殊成员:

____________________________________________________________________

4.1 大众情人:静态数据成员(用于表示总数)

在变量前加 static 即可: 如 static int humanCount

加了static的变量就不再存在于堆区了, 所以任何东西都能访问.


4.2“不能拥有的方法:静态成员函数

根据上面的描述.

该函数就是在普通函数前加static

如static int getHumancount;



下面是两者的说明

说明:




下面介绍一下他们的区别:

1)静态数据成员

对象的成员函数(没有static的成员函数)内部,可以直接访问“静态数据成员”

类的静态成员函数(有static的成员函数)内部,可以直接访问“静态数据成员”

即:所有的成员函数,都可以访问静态数据成员。

 

类不能直接访问普通的静态数据成员(Human::humanCount非法)而必须用 int Human::humanCount;

 

2)静态成员函数

对象可以直接访问静态成员函数

类可以直接访问静态成员函数(Human::getHumanCount()

在类的静态成员函数(类的静态方法)内部,不能直接访问this指针和对象的数据成员!

在类的静态成员函数(类的静态方法)内部,只能访问类的数据成员.



4.3永葆初心之常成员(const)

4.3.1const数据成员


相信大家前面都看到过const

const 就表明常量,只读无法修改

注意:不能在构造函数或其他成员函数内,对const成员赋值!

初始化:

const bloodType="  "

或使用初始化列表 在函数后面加冒号就可以给const赋值

Human::Human():bloodType("未知") { }

Human::Human(int age ,string bldType):bloodType(bldType){}


4.3.2const成员函数

需求分析:

constHuman对象,不能调用普通的成员函数。

 分析:

C++认为,const(常量)对象,如果允许去调用普通的成员函数,而这个成员函数内部可能会修改这个对象的数据成员!而这将导致const对象不再是const对象!

【类比】:专一男就是const对象,撩妹方法,就是普通的成员函数,如果允许专一男去撩妹,那么专一男,也就不专一了!

解决方案:

如果一个成员函数内部,不会修改任何数据成员,就把它定义为const成员函数。

建议:

C++的成员函数设置建议:

如果一个对象的成员函数,不会修改任何数据成员,那么就强烈:

把这个成员函数,定义为const成员函数!

Humandescription方法

//Human.h

class Human  {

public:

    ......

    void description() const;  //注意,const的位置

    ......

};

 

//Human.cpp

void  Human::description ()const {

    cout << "age:" <<  age

        <<  " name:" << name

        <<  " salary:" << salary

        <<  " addr:" << addr

        <<  " bloodType:" << bloodType << endl;

}

 

//main.cpp

int  main(void) {

    const Human  h1;

    h1.description();

   

    system("pause");

    return 0;

}

ps:const 对象只能调用const方法(在方法后加const),

别的对象可以使用各种方法。


 使用const与static是对于安全性的考虑,作为初学者的我要养成谨慎的习惯,把平时的练习当开发来看待。午安~~~~~




以上是关于C++之各类特殊成员的主要内容,如果未能解决你的问题,请参考以下文章

C++:特殊工具与技术之union(联合-共用体)

C++特殊成员

C++知识分享:C++类特殊成员函数

[分享]C++基础十一-类的特殊成员

[分享]C++基础十一-类的特殊成员

[分享]C++基础十一-类的特殊成员