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成员函数
需求分析:
const的Human对象,不能调用普通的成员函数。
分析:
C++认为,const(常量)对象,如果允许去调用普通的成员函数,而这个成员函数内部可能会修改这个对象的数据成员!而这将导致const对象不再是const对象!
【类比】:专一男就是const对象,撩妹方法,就是普通的成员函数,如果允许专一男去撩妹,那么专一男,也就不专一了!
解决方案:
如果一个成员函数内部,不会修改任何数据成员,就把它定义为const成员函数。
建议:
C++的成员函数设置建议:
如果一个对象的成员函数,不会修改任何数据成员,那么就强烈:
把这个成员函数,定义为const成员函数!
Human的description方法
//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++之各类特殊成员的主要内容,如果未能解决你的问题,请参考以下文章