C++ 类和对象

Posted 别碰我的宏定义

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 类和对象相关的知识,希望对你有一定的参考价值。


前言

c是面向过程的语言,关注的是过程,将问题分解为一个一个步骤
C++是面向对象的语言,关注的是对象,将一个问题分解为不同对象,靠对象之间的交互完成。

一、对象是什么?

类是对象的模板,对象是类的实例化,对象通过调用类的方法产生,具有类的全部特性,拥有类所定义的数据和实现的函数。

二、对象的定义和类的引入

1.类的组成和实现

1.类的组成

由关键字class 和类名classname和{};组成的就是一个最简单基本的类。一般啥都不定义的情况下,类的大小为1,做占位用,表示这个类存在。

#include<iostream>
using namespace std;
class classname
{
private:
	//int a; //a就是类classname的成员变量。
public//void display()     void display()就是类classsname的类成员函数
	//{
	//	cout<< " a = "<< a <<endl;
 	//}
};//由关键字class 和类名classname和{};组成的就是一个最简单基本的类。一般啥都不定义的情况下,类的大小为1,做占位用,表示这个类存在。
int main()
{
	cout << sizeof(classname) << endl;
	return 0;
}

类中的数据称为成员变量,类中的函数称为类的方法或者类的成员函数。

2.类的实现

类的两种实现方式:
1.类的声明和定义在类中,这种编译器会将成员函数视为内联函数。

#include<iostream>
using namespace std;
class A
{
public:
	int Add(int a = 0, int b = 0)
	{
		return a + b;
	}
};
int main()
{
	A a;
	cout<< a.Add(10, 20)<< endl;
}

2、定义和声明分离,在头文件中在声明,在CPP文件中实现。

//.h文件
#ifndef _A_H_
#define _A_H_
class A
{
public:
	int Add(int a = 0, int b = 0)
	{
		return a + b;
	}
};
#endif
//.cpp文件
#include<iostream>
#include"A.h"
using namespace std;

int main()
{
	A a;
	cout<< a.Add(10, 20)<< endl;
}

3.类成员变量和函数的权限

1.类中成员的权限

类成员变量和函数就是类的特性和方法。C++将这两个封装起来形成一个完整的类,通过访问限定符来确定是否可以为外部用户使用。访问限定符一共有三种,分别是private(私有)和public(公有)还有protected(保护)
1、被private和protected修饰的在类外是不能被访问和修改的,被public修饰的允许访问和修改
2、访问限定符的作用域从该访问限定符出现的位置到下一访问限定符出现为止。
3、class的默认访问限定符是private ,而struct的默认访问限定符是public。
4、访问限定符只是在编译时有用,在进入内存之后没有任何访问限定符上的区别。

2.类的作用域

定义一个类就拥有自己的作用域,在类外访问类的成员函数时,就需要用::作用域解析声明这个函数属于那个类

#include<iostream>
using namespace std;
class A
{
public:
	int Add(int a = 0, int b = 0);
};
int A::Add(int a, int b)
{
	return a + b;
}
class B
{
public:
	int Add(int a = 0, int b = 0);
};
int B::Add(int a, int b)
{
	return 'a' + 'b';
}
int main()
{
	A a;
	cout<< a.Add(10, 20)<< endl;
}

在功能较为简单的类中差别不大,但是在大型的工作中::作用域解析符就会体现特别大的作用。

三、this指针和类的大小

1.this指针

C++编译器给每一个 “非静态成员函数”增加了一个隐藏的指针参数,让该指针指向当前的对象(函数正在运行时的对象),在函数体中所有成员变量的操作都是通过this指针来访问的,只不过this指针是编译器默认的,你可以写也可以不写。

#include<iostream>
using namespace std;
class B{
public:
	B(int year = 0, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
	void print()
	{
		cout << this->_year << "-" <<this->_month << "-" << this->_day << endl;
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	B b(2021,7,20);
	b.print();
	return 0;
}

2.this指针的特性

1、this指针的类型是*const的类型
2、this指针只能在成员函数内部使用。
3、this指针本质上是一个成员函数的形参,是对象在调用成员函数时将对象的地址传给this,故this指针不会存在于对象中
4、this指针由编译器传入,不需要用户的传入。

3.类的大小

空类大小为1,其余情况下需要注意字节对齐,一个类的大小不包括他的静态成员变量和成员函数,只有其定义的变量,而且要注意字节对齐,在不同的对齐规则下,一个类的大小可能不相同。

#include<iostream>
using namespace std;
class B{
public:
	B(int year = 0, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
	void print()
	{
		cout << this->_year << "-" <<this->_month << "-" << this->_day << endl;
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
	static int hour;
};
int main()
{
	B b;
	cout << " B类的大小:" << sizeof(b) << endl;
	return 0;
}

在这里插入图片描述


以上是关于C++ 类和对象的主要内容,如果未能解决你的问题,请参考以下文章

C++类和对象--继承

C++类和对象1

成功创建c ++类和对象[重复]

C++从青铜到王者第二篇:C++类和对象(上篇)

C++类和对象的简单应用举例

C++初阶类和对象