1.类
类是一个抽象的说法,用来描述生活中的各种事情。
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。
1.1类的组成:
类中的变量称为类的属性或成员变量;
类中的函数称为类的方法或者成员函数。
class className {
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
1.2类的两种定义方式:
- 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
class className { void showenfo() { cout<<_name<<_sex<<_age; } char* _name; cahr* _sex; int _age; };
2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::
class Name
{ void showenfo()
char* _name;
ahr* _sex;
int _age;
};
#intclude"stde.h"
void Name::showenfo()
{
cout<<_name<<_sex<<_age;
}
1.3类的访问权限管理
【访问限定符说明】
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 如果后面没有访问限定符,作用域就到 } 即类结束。
- class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
1.4面向对象的三要素:封装,继承,多态。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。
class Person {
public: void PrintPersonInfo();
private: char _name[20];
char _gender[3];
int _age;
}; // 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo() {
cout << _name << " "<< _gender << " " << _age << endl;
}
1.5类的实例化
定义:使用类创建一个对象的过程,叫实例化。
- 类是对对象分配实际的内存空间来存储它
- 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
- 类像一个框架,将他们包容在一起,变量如同图纸。
1.6类的大小
类的大小取决于成员变量,成员函数存放在代码段中(公共区域),不参与计算.对于一个没有成员变量的类大小为1
#pragma pack(对齐值) 设置对齐默认值
内存对齐:解决空间浪费问题,为什么要内存问题。
机器一次调用/查看4或8,如果不对齐会出现多次访问,才能完成。
2.this
特性:
- this指针类型*const ,默认不能赋值/修改。
- 只能在成员函数中使用(this->对象名)。
- this指针是“成员函数”第一个隐含的指针形参。
- this指针是存储在栈中(也可能是寄存器)。
- this可以为空指针。
class A { public: char* _name; char*_sex; int _age; A(char* y=" ",char* r=" ",int s=0); void PrintA(); ~A(); };
#include"stae.h" A::A(char* y,char* r,int s)//构造函数 { this->_name=y;//指向类中的_name this->_sex=r; this->_age=s; } void A::PrintA() { cout<<this->_name; cout<<this->_age; } A::~A()//构系函数 { this->_name=nullptr; this->_sex=nullptr; this->_age=0; }