C++类和对象

课程: C++中的一个类是导致面向对象编程的构建块。它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。C++类就像一个对象的蓝图。 例如:考虑类 汽车 .可能会有许多不同名称和品牌的汽车,但它们都将拥有一些共同的特性,就像所有汽车一样 四轮 , 速度限制 , 里程范围 所以在这里,汽车是阶级,车轮,速度限制,里程是他们的属性。

null
  • 类是一种用户定义的数据类型,具有数据成员和成员函数。
  • 数据成员是数据变量,成员函数是用于操作这些变量的函数,这些数据成员和成员函数一起定义了类中对象的属性和行为。
  • 在上面的例子中 汽车 ,则数据成员将为 速度限制 , 里程 etc和成员函数可以 刹车 , 提速

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

定义类和声明对象

类使用C++类定义,然后用类名定义。类的主体在花括号内定义,并以分号结尾。 classes-and-objects-in-c

声明对象: 定义类时,只定义对象的规范;没有分配内存或存储。要使用类中定义的数据和访问函数,需要创建对象。

语法:

ClassName ObjectName;

访问数据成员和成员函数 :类的数据成员和成员函数可以使用对象的点(’.’)运算符访问。例如,如果对象的名称为 obj 您希望使用名称访问成员函数 printName() 那你就得写了 obj。printName() .

访问数据成员

公共数据成员的访问方式也与给定的相同,但私有数据成员不允许对象直接访问。访问数据成员完全取决于该数据成员的访问控制。 这种访问控制由 C++中的访问修饰符 .有三个访问修饰符: 公共、私人和受保护 .

// 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

类中的成员函数

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

  • 类内定义
  • 课外定义

要在类定义之外定义成员函数,我们必须使用scope resolution::操作符以及类名和函数名。

// 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: xyzGeek id is: 15

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

注意:声明 友元函数 是一种为非成员函数提供私有访问权限的方法。

建设者

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

// 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;
}
//Parameterized Constructor
Geeks( int x)
{
cout << "Parameterized Constructor called" << endl;
id=x;
}
};
int main() {
// obj1 will call Default Constructor
Geeks obj1;
cout << "Geek id is: " <<obj1.id << endl;
// obj1 will call Parameterized Constructor
Geeks obj2(21);
cout << "Geek id is: " <<obj2.id << endl;
return 0;
}


输出:

Default Constructor calledGeek id is: -1Parameterized Constructor calledGeek id is: 21

A. 复制构造函数 创建一个新对象,它是现有对象的精确副本。编译器为所有类提供默认的复制构造函数。 语法:

class-name (class-name &){}

析构函数

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

// 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


输出:

Destructor called for id: 0Destructor called for id: 1Destructor called for id: 2Destructor called for id: 3Destructor called for id: 4Destructor called for id: 7

纯虚析构函数

相关文章:

本文由 Abhirav Kariya .如果你喜欢GeekSforgeks并想贡献自己的力量,你也可以用write写一篇文章。极客。组织或邮寄你的文章进行评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享