C/C++编程笔记:关于C++类和对象,这些知识点你知道吗?

112 阅读3分钟

类: C ++中的类是构建块,可导致面向对象的编程。它是用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。

C ++类就像对象的蓝图。

例如:考虑汽车类别。可能有许多名称和品牌不同的汽车,但它们都会共享一些共同的属性,例如所有汽车都有4个车轮,速度限制,里程范围等。因此,这里的汽车是类别和车轮,速度限制,里程是他们的属性。

类是用户定义的数据类型,具有数据成员和成员函数。

数据成员是数据变量,成员函数是用于操纵这些变量的函数,这些数据成员和成员函数共同定义了类中对象的属性和行为。

在上面的Car类示例中,数据成员将是速度限制,里程等,并且成员功能可以应用制动,增加速度等。

一个对象是一个类的实例。当定义了一个类时,不分配内存,而是在实例化(即创建对象)时分配内存。

定义类和声明对象

在C ++中,使用关键字class及其后的类的名称定义了一个类。类的主体在大括号内定义,并在末尾以分号结束。

声明对象:定义类时,仅定义该对象的规范;否则,将不执行任何操作。没有分配内存或存储空间。要使用该类中定义的数据和访问功能,您需要创建对象。

句法:

ClassName ObjectName;

访问数据成员和成员函数:可以使用dot('。')运算符与对象一起访问类的数据成员和成员函数。例如,如果对象的名称是obj,并且您想使用名称printName()访问成员函数,则必须编写obj.printName()。

访问数据成员

公共数据成员的访问方式也与给定的方式相同,但是对象不允许直接访问私有数据成员。访问数据成员仅取决于该数据成员的访问控制。

此访问控制由C ++中的Access修饰符提供。有三种访问修饰符:public,private和protected。

// C++ program to demonstrate
// accessing of data members

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	// Access specifier
	public:

	// Data Members
	string geekname;

	// Member Functions()
	void printname()
	{
	cout << "Geekname is: " << geekname;
	}
};

int main() {

	// Declare an object of class geeks
	Geeks obj1;

	// accessing data member
	obj1.geekname = "Abhi";

	// accessing member function
	obj1.printname();
	return 0;
}

输出:

Geekname is:Abhi

类中的成员函数

有两种定义成员函数的方法:

(1)内部类定义

(2)课外定义

要在类定义之外定义成员函数,我们必须使用范围解析:::以及类名和函数名。

// C++ program to demonstrate function
// declaration outside class

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	string geekname;
	int id;
	
	// printname is not defined inside class definition
	void printname();
	
	// printid is defined inside class definition
	void printid()
	{
		cout << "Geek id is: " << id;
	}
};

// Definition of printname using scope resolution operator ::
void Geeks::printname()
{
	cout << "Geekname is: " << geekname;
}
int main() {
	
	Geeks obj1;
	obj1.geekname = "xyz";
	obj1.id=15;
	
	// call printname()
	obj1.printname();
	cout << endl;
	
	// call printid()
	obj1.printid();
	return 0;
}

输出:

Geekname is:xyz

Geek id is::15

请注意,默认情况下,在类定义中定义的所有成员函数都是inline,但是您也可以通过将关键字inline与其内联来使任何非类函数内联。内联函数是实际函数,在编译过程中会像预处理器宏一样复制到各处,因此可以减少函数调用的开销。

构造函数

构造函数是特殊的类成员,每次实例化该类的对象时,编译器都会调用它们。构造函数与类具有相同的名称,并且可以在类定义的内部或外部定义。

共有3种类型的构造函数:

(1)默认构造函数

(2)参数化的构造函数

(3)复制构造函数

// C++ program to demonstrate constructors

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	int id;
	
	//Default Constructor
	Geeks()
	{
		cout << "Default Constructor called" << endl;
		id=-1;
	}
	
	//Parametrized Constructor
	Geeks(int x)
	{
		cout << "Parametrized Constructor called" << endl;
		id=x;
	}
};
int main() {
	
	// obj1 will call Default Constructor
	Geeks obj1;
	cout << "Geek id is: " <<obj1.id << endl;
	
	// obj1 will call Parametrized Constructor
	Geeks obj2(21);
	cout << "Geek id is: " <<obj2.id << endl;
	return 0;
}

一个拷贝构造函数创建一个新的对象,这是现有对象的精确副本。编译器为所有类提供默认的Copy构造函数。

句法:

类名(类名&){}

析构函数

析构函数是对象的作用域结束时由编译器调用的另一个特殊成员函数。

// C++ program to explain destructors

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	int id;
	
	//Definition for Destructor
	~Geeks()
	{
		cout << "Destructor called for id: " << id <<endl;
	}
};

int main()
{
	Geeks obj1;
	obj1.id=7;
	int i = 0;
	while ( i < 5 )
	{
		Geeks obj2;
		obj2.id=i;
		i++;		
	} // Scope for obj2 ends here

	return 0;
} // Scope for obj1 ends here

每天学点小知识,希望对你有帮助~

**另外如果你想更好的提升你的编程能力,学好C语言C++编程!**弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,**QQ群【951258402】**微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享: