c语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过步骤解决问题
c++面向对象,关注的是对象,将一件事情拆分成不同对象,靠对象之间的交互完成
类的定义
class className
{
//类体:由成员函数和成员变量组成
};
class为定义类的关键字,className为类的名字,{}中为类的主体,类中的元素为类的成员,类中的数据为类的属性,默认访问私有
struct也能定义类,默认访问共有
class A
{
public:
//成员函数
void fun()
{}//声明加定义
//成员变量
private:
int a;
int b;
char c;
};
int main()
{
A a;
a.fun();
a.a;//非法
}
//-------------------------------------------
class B //b.h
{
void fun();//只声明
}
//b.cpp
void B::fun() //类外面定义 要加作用域声明符::
{
}
访问限定符:public private protected
在类外可以直接访问public!! 不能访问private
定义的类不占内存,定义类的对象占内存
用类类型创建对象的过程,称为类的实例化!!,实例化出来的对象,占用实际的物理空间,储存类成员的变量。
封装
将数据和操作数据的方法进行有机的结合,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互。
内存区域
系统内存
栈(高地址向低地址)编译器自动管理
//共享内存映射段
堆(低地址向高地址)
数据段(存放全局变量与静态变量)
代码段(常量,字符串)
-------------------------------------------------------------------------
一个空类 占一个字节!!只要一个函数也占一个字节!!
vs默认对其是8 Linux默认是4
this 指针
class Data
{
public:
void setData(int year,int month)
{
_year=year;
_month=year;
}
void display()
{
cout<<_year<<" "<<_month<<endl;
}
private:
int _year;
int _month;
}
int main()
{
Data d;
d.setDate(2019.3);
d.display();//display(Data* const this)
Data d2;
d2.setData(2019.2);
d2.display();
return 0;
}
this 指针
c++编译器给每一个“成员函数”增加了一个隐藏的指针参数,让该指针指向当前对象,在函数体中的所有成员变量的操作,都是通过该指针去访问。即用户不需要来传递,编译器自动完成。
const int* p1; //const 修饰int,指向的空间可以变,指向的内容不能变
int* const p2;//const 修饰指针,指针指向空间不能变 指向的内容可以变
this指针的特性
1.this指针的类型:类类型*const
2.只能在“成员函数”的内部使用
3.this指针的本质实际是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。
4.this指针是成员函数第一个隐含的指针形参,一般情况通过ecx寄存器自动传递,不需要用户传递
5.this指针不能为空!!做解引用的相关操作this指针一定不能为空!! 不适用this指针可以为空