第二章 c++重要思想讲解
类和对象
理解类之前,首先理解面向过程和面向对象编程的区别。
优缺点:
面向过程性能上优于面向对象,因为类在调用的时候开销比较大。但是不易维护和拓展。
什么是类?
**什么是对象?**当然这里不是指男女朋友的对象哈! 哈哈哈
对象即类的实例:
如上人类可以称为类,男人、女人称为对象。有自己特有的属性和数据。
面向对象四大特征:
抽象:对某一个具体问题进行概括
封装:对每个对象的属性和数据包装在一个类中
继承:一个类可以从现有的类派生而来
多态:指类中具有显示功能的同名函数,并根据不同的类的对象对同一消息产生的不同行为。
类的定义:
类由关键字class开始,后面为用户定义的类名,花括号包括部分称为类体。
class {
public:
void setArray();
int setAge();
private:
void setList();
void setList2();
protected:
……
}
特殊对象
禁止通过构造函数进行的隐式函数进行的隐式转换,针对某个参数的构造函数而言。
this指针
this是c++中的一个关键字,他指向当前对象,可以通过它访问当前对象的所有成员。
静态变量
只归属于类的对象所有。
用关键字static定义,一个类中可以有一个多个静态函数成员变量,所有此类的对象都可以用它。在内存分区的全局变量数据区分配内存,到结束时才释放。也就意味着,stati成员变量不会随对象的创建而分配内存,也不对随其销毁而释放。普通成员在对象创建时分配内存,在对象销毁时释放内存。
注意:静态成员变量只能在类的内部声明,在外部定义。inline static int b = 20 //C++17标准
#include<iostream>
using namespace std;
class test
{
public:
static int staticNum;
int noStaticNum = 100;
void coutA() {
cout <<"staticNum of t1:" << this->staticNum << endl;
cout << "nostaticNum of t1:" << this->noStaticNum << endl;
this->noStaticNum--;
this->staticNum--;
};
};
int test::staticNum = 20; //只能在内存分区的全局变量数据区分配内存时定义
int main() {
test t1;
t1.coutA();
test t2;
t2.coutA();
}
staticNum of t1:20
nostaticNum of t1:100
staticNum of t1:19
nostaticNum of t1:100
从结果可以看出:staticNum的值被两个对象控制,而nostaticNum只收当前对象控制。
const
const需要在定义时初始化,不能修改const变量.
在内中,const成员函数可以访问任何对象,但是常对象只能访问常函数。