初识
c与c++区别
C语言面向过程,更为关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。
类
注:c++兼容C语言中 struct ,但将之升级为了类。
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分(;)
号不能省略。
访问限定符
用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
特点
1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
属性
类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数
类的声明和定义分离
小知识:定义的标志是开空间。
注意:定义可以是初始化,但初始化不一定是定义。例:
声明中包于.h文件中,而定义包含于.cpp 文件中 只是搜索时要注意:
类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。
类的实例化
用类类型创建对象的过程,称为类的实例化。
特点
1.类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没
有分配实际的内存空间来存储它。
2.一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量。
3.类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图。
类和 struct 的区别
重点:唯一的区别就是默认访问顺序不同
类的默认访问顺序:先private(私有),再public(公有)。
struct的默认访问顺序:先public(公有),再private(私有)。
类的储存方式和大小
储存
在类域中只保存成员变量,成员函数存放在公共的代码段:
特别:成员函数储存于代码段
大小
由类的储存方式可以知道,计算一个类的大小,实际上就是计算其成员变量的大小,其成员函数储存于代码段不会占用类的空间。
特别:当一个类没有成员变量时,只有成员函数或者什么都没有时。例:
此时类的大小为1字节,起占位作用标识对象实例化时定义存在过。
(隐含的)this指针
含义:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
特点
1.形参和实参部分,不能显示写出来!
2.函数内部可以使用
3.this指针类型:类 类型* const 指针的地址不能被改变(const在 * 之后修饰指针本身,地址不能被改变)
4.4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
递,不需要用户传递。(函数参数为 n+1 个)
this指针的位置
this指针是一个形参,在栈上。(有些编译器可能会用寄存器来传参)
this指针易错题
1.
// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
public:
void PrintA()
{
cout<<_a<<endl;
}
private:
int _a;
};
int main()
{
A* p = nullptr;
p->PrintA();
return 0;
}
该代码会运行崩溃。
原因:此处将this指针置空后传递进行解引用。