📜  C++类和对象

📅  最后修改于: 2021-05-30 12:58:08             🧑  作者: Mango

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

  • 类是用户定义的数据类型,具有数据成员和成员函数。
  • 数据成员是数据变量,成员函数是用于操纵这些变量的函数,这些数据成员和成员函数共同定义了类中对象的属性和行为。
  • 在上面的Car类示例中,数据成员将是速度限制里程等,并且成员功能可以应用制动增加速度等。

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

定义类和声明对象

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

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

句法:

ClassName ObjectName;

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

访问数据成员

公共数据成员的访问方式也与给定的方式相同,但是对象不允许直接访问私有数据成员。访问数据成员只取决于该数据成员的访问控制。
此访问控制由C++中的Access修饰符提供。有三种访问修饰符: public,private和protected

// C++ program to demonstrate 
// accessing of data members 
  
#include 
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

类中的成员函数

有两种定义成员函数:

  • 内部类定义
  • 课外定义

要定义的类定义之外的成员函数,我们必须使用范围解析::运算符,类名和函数名一起。

// C++ program to demonstrate function 
// declaration outside class
  
#include 
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种类型的构造函数:

  • 默认构造函数
  • 参数化的构造函数
  • 复制构造函数
// C++ program to demonstrate constructors
  
#include 
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: " <

输出:

Default Constructor called
Geek id is: -1
Parametrized Constructor called
Geek id is: 21

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

class-name (class-name &){}

析构函数

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

// C++ program to explain destructors
  
#include 
using namespace std;
class Geeks
{
    public:
    int id;
      
    //Definition for Destructor
    ~Geeks()
    {
        cout << "Destructor called for id: " << id <

输出:

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

纯虚拟析构函数

相关文章:

  • C++中的多重继承
  • C++测验
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”