【C++】类和对象

目录

什么是类

类的定义

类的大小

this指针

缺省函数——在声明函数的时候指定默认值

inline内联函数——在类里面实现的函数

 宏定义与inline的区别


什么是类


类将现实生活中相似的事物抽象出来,将它的不同类型的属性以及其相关操作封装在一起,分为公有、私有,构成一个集合,形成的一种新的数据类型

类中有相关的属性和操作
如:
水果类:苹果、香蕉、葡萄
    属性:颜色、大小
    操作:吃、榨汁
学生类:小学生、中学生、大学生
    属性:学号、姓名、年龄
    操作:学习


对象:是类的一个实例化,是现实生活中存在的,占用内存单元。如:苹果是水果类的一个对象。

类的定义

class 类名
{
访问权限(public/private/protected):
    成员变量/成员函数;
};

类中有公有、私有、保护三种类型的数据

public:自己和外界都可以访问——操作(成员函数)
private:自己和友元可访问,其他都不可访问——属性(成员变量)
protected:自己和子类可访问,外界不能访问

类的大小


1.类中数据成员大小之和
2.普通函数不占类的空间大小
3.static数据成员不在类中分配空间
4.virtual虚函数占一个指针大小(x64:8,x86:4)

class Clock//钟表类
{
public:
	void Set();
	void Show();
	virtual void fun() {};
private:
	int m_hour;
	int m_minute;
	int m_second;
	static int a;
};
int main()
{
	Clock c;
	cout << sizeof(Clock) << endl;//内存对齐(x64)输出:24
}

this指针

非静态成员函数中有隐藏的this指针,接收当前对象的地址
使得多次调用此函数时,传入的参数不会混淆

class Clock
{
public://同名不同参——重载
	void Set()//void Set(this)
	{
		m_hour = 10;
		m_minute = 10;
		m_second = 10;
		
	}
	void Set(int hour)//Set(this,int hour)
	{
		m_hour = hour;
		this->m_minute = 20;//可以这样写
		m_second = 20;
	}

	void Show()
	{
		cout << m_hour<<":"<<m_minute<<":"<<m_second<< endl;
	}
private:
	int m_hour;
	int m_minute;
	int m_second;
};

缺省函数——在声明函数的时候指定默认值

带参数的函数

1.如果没有传参,则调用默认值;
2.如果传参了,就用所传递的值;
3.如果有一个带默认值,则后面(右边)的必须带默认值;
4.参数的默认值只在声明的时候带,在定义的时候不带
(如果将函数的定义放在类的外部,则不需要带默认值)
5.不能函数重载了

inline内联函数——在类里面实现的函数

内联函数在编译的时候就执行了:空间换时间
将功能比较简单,代码比较短小(五行以内)的函数作为内联函数

inline只是程序员的建议,至于编译器是否按照inline来编译是不一定的。
代码相对多,功能复杂的函数,即使人为写成了inline函数,编译器也不会按照inline函数编译

class Clock
{
public:
	void Set() {}
	inline void Set(int hour = 23,int minute = 30,  int second = 30)//内联函数
	{

		m_hour = hour;
		m_minute = minute;
		m_second = second;
	}
	void Show()//按照inline函数来编译
	{
		cout << m_hour << ":" << m_minute << ":" << m_second << endl;
	}
	virtual void fun() {};
private:
	int m_hour;
	int m_minute;
	int m_second;
};
int main()
{
	Clock c1;
	c1.Set(13,13);
	c1.Show();//13:13:30
}

 宏定义与inline的区别


1.宏定义在编译之前展开,inline在编译时
2.宏定义会出现歧义,inline函数不会
3.宏定义时预处理命令,inline是函数(本质不同)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦樂~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值