C++类和对象——入门

C++作为一门面向对象的高级语言(OOP——Object Oriented Programming)自然有着相应概念与定义。

一.class——类的引入 

在C语言中,结构体只能定义变量,无法定义函数。后C++引入class(此时还不叫“C++”,而是“C with Classes”,在1983被正式更名为C++),可以理解为一个可以定义函数的结构体(二者略有不同)

二.对象——类的实例化

定义了一组属性和行为的模板或蓝图;对象则是其具体化实现、是类的实例,具体实现类定义的属性和行为。

三.类的定义

class className
{
    //成员变量
    //成员函数
    //成员对象
};

成员变量没什么好说的,这里主要讲成员函数和成员对象。

1.成员函数

(1)函数的声明和实现全都放在类中,但这样编译器可能会将成员函数作为内联函数处理

class Myclass
{
public:
	void Fuc(int a)
	{
		a += 10;
	}
};
int main(void)
{
	Myclass c1;
	c1.Fuc(10);
	return 0;
}

汇编代码如下

    Myclass c1;
    c1.Fuc(10);
00007FF6DD581503  mov         dword ptr [rsp+58h],0Ah  
00007FF6DD58150B  mov         eax,dword ptr [rsp+58h]  
00007FF6DD58150F  add         eax,0Ah  
00007FF6DD581512  mov         dword ptr [rsp+58h],eax  

可以看到函数直接在这里展开

补充:内联函数——inline

由inline修饰的函数会在编译阶段于调用函数处展开,并不会调用函数(这种情况仅在被inline修饰函数的内容较少时出现,具体由编译器判断)

(2)只在类中声明函数,类外实现 ,但类外实现须在函数名前加上类名::

class Myclass
{
public:
	void Func(int a);
};
void Myclass::Func(int a)
{
	a += 10;
}
int main(void)
{
	Myclass c1;
	c1.Func(10);
	return 0;
}

2.成员对象

class Myclass_f
{
	int _a;
};
class Myclass_s
{
	Myclass_f obj1;
};
int main(void)
{
	return 0;
}

类的成员变量是另一个类的实例,上述代码中;Myclass_s中的实例化对象被称为成员对象。

四.类的访问限定符——public,protected,private

public修饰的成员可以在类外直接被访问,protected、private则不行。访问权限作用域从该访问限定符出现的位置直到下一个访问限定符出现为止。class的默认访问限定符为private,struct则为public(为兼容C)

注:访问限定符只在编译阶段有用,当数据映射到内存后,无任何区别。

五.类的大小

类的大小为成员变量之和,但成员函数被放在公共代码段,不被算入大小,空类大小为一。计算规则依旧遵循C语言中的内存对齐规则,参考代码如下:

#include<iosteam>
using namespace std;
class Myclass_f
{
	int _a;
	int _b;
	char _s;
	char arr[4];
};
class Myclass_s
{

};
int main(void)
{
	Myclass_f obj1;
	Myclass_s obj2;
	cout << sizeof(obj1) << endl;
	cout << sizeof(obj2) << endl;
	return 0;
}

输出结果为:16

                        1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值