1.面向过程和面向对象初步认识
C语言是面向过程的,C++是面向对象的。举例来说,同样是完成“洗衣服”这件事,C语言是将其分为很多个步骤:拿盆→放水→放衣服→放洗衣粉→……→拧干→晾衣服。而C++关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。人只需要将衣服和洗衣粉放进洗衣机,就可以了。
2.类的引入
struct:在C语言中,struct只能定义结构体变量,但在C++中,struct可以定义变量,也可以定义函数,而在C++中,我们更喜欢用class来定义结构体。
3.类的定义
class ClassName
{
//类体:由成员变量和成员函数组成
//类中的变量称为类的属性或成员变量
//类中的函数称为类的方法或成员函数
};//此处有分号
calss为定义类的关键字,ClassName是类的名字,{}中为类的主体。
4.类的访问限定符及封装
限定符说明:
1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
5.类的作用域
在类外定义成员时,要使用::作用域操作符指明成员属于哪个类。
class Person
{
public:
void PrintPersonInfo();//在类里面声明
private:
char _name[20];
char _gender[3];
int _age;
};
//这里需要指定PrintPersonInfo是属于Person这个类域
//在类外定义成员函数
void Person::PrintPersonInfo()
{
cout << _name << " "<< _gender << " " << _age << endl;
}
6.类的实例化
上面那段代码,Person类是不占空间的,只有Person实例化出的对象才有具体的信息。
int main()
{
Person._age = 100; // 编译失败:error C2059: 语法错误:“.”
return 0;
}
7.类对象模型
如何计算类对象的大小呢?一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐。规则同结构体大小计算。值得注意的是空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。
8.this指针
this指针本质是个形参,存在栈里。
vs对this指针的传递进行了优化,对象地址是放在ecx中。ecx存储this指针的值。
this指针说明: