目录

引言

文章思路

一、类的定义

1.类的定义 

 2.类的访问限定符

3.class与struct的使用区别

4.类域

二、对象的定义和使用

1.对象的定义

2.对象的使用

3.对象的大小

4. this指针


 

 

引言

 

文章思路

 

一、类的定义

1.类的定义 

class MyClass 
{ 
public: 
    int myNumber; //成员变量
    void myFunction(); //成员函数
};

在上面的例子中,MyClass是一个类,它有一个成员变量myNumber和一个成员函数myFunction

 

注意事项

 以下是一个日期类的简单示例:

(关于public等关键字,可参考下文:类的访问限定符)

class Date
{
public:
 void Init(int year, int month, int day)//类中定义默认为内联函数
 {
     _year = year;
     _month = month;
     _day = day;
 }
private:
 // 为了区分成员变量,⼀般习惯上成员变量

 // 会加⼀个特殊标识,如_ 或者 m开头

     int _year; // year_ m_year
     int _month;
     int _day;
};

 

 2.类的访问限定符

C++⼀种实现封装的方式,用类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限 选择性的将其接⼝提供给外部的用户使用。

C++提供了三种访问限定符:public、protected和private。它们用于控制类成员的访问权限

  • public:成员在任何地方都是可访问的。
  • protected:成员在类内部和派生类中是可访问的。
  • private:成员只能在类内部访问。

 

3.class与struct的使用区别

在C++中,classstruct都可以用来定义自定义类型,但它们在使用上有一些关键的区别,主要涉及到成员的默认访问权限和继承的默认行为。

  1. 默认访问权限
    • class中的成员默认是private的,这意味着在类的外部不能直接访问这些成员,需要通过公有成员函数(方法)来访问。
    • struct中的成员默认是public的,这意味着在结构体外部可以直接访问这些成员。
  2. 继承的默认行为:(同样的,继承的相关内容会放在后续文章展开讲解,这里先简单了解即可)
    • 当使用class进行继承时,默认是private继承。这意味着派生类只能访问基类的公有和保护成员,且这些成员在派生类中变成了私有成员。
    • 当使用struct进行继承时,默认是public继承。这意味着派生类可以访问基类的公有和保护成员,且这些成员在派生类中保持原有的访问级别(公有或保护)。

 

4.类域

类域的定义

  • 基本概念:类域是由类定义引入的一个作用域,它包含了类中声明的所有成员变量和成员函数。在类域内定义的标识符(如成员变量名、成员函数名)仅在类的范围内有效。
  • 类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使用::作用域操作符指明成员属于哪个类域
  • 类域影响的是编译的查找规则。下⾯程序中Init如果不指定类域Stack,那么编译器就把Init当成全 局函数,那么编译时,找不到array等成员的声明/定义在哪⾥,就会报错。指定类域Stack,就是知 道Init是成员函数,当前域找不到的array等成员,就会到类域中去查找
#include<iostream>
using namespace std;
class Stack
{
public:
 // 成员函数

     void Init(int n = 4);
private:
 // 成员变量

     int* array;
     size_t capacity;
     size_t top;
};

// 声明和定义分离,需要指定类域

void Stack::Init(int n)
{
     array = (int*)malloc(sizeof(int) * n);
     if (nullptr == array)
     {
         perror("malloc申请空间失败");
         return;
     }
     capacity = n;
     top = 0;
}
int main()
{
     Stack st;
     st.Init();
     return 0;
}

类域与其他作用域的关系

 

二、对象的定义和使用

1.对象的定义

在C++中,定义对象的第一步是定义一个类。类定义了一组具有相同属性和方法的对象的蓝图。下面是一个简单的类的例子:(为了方便理解,将成员变量声明为了公有)

class Car {  
public:  
    string brand; // 数据成员  
    string model;  
    int year;  
  
    void displayInfo() { // 成员函数  
        cout << "Brand: " << brand << ", Model: " << model << ", Year: " << year << endl;  
    }  
};

 

2.对象的使用

一旦定义了类,就可以创建该类的对象了。创建对象的过程称为实例化。

 【C++指南】类和对象(一):类和对象的定义和使用 基础讲解-LMLPHP

以下是如何创建Car类的对象并使用它的示例:

int main() {  
    Car myCar; // 创建对象  
    myCar.brand = "Toyota"; // 访问数据成员并赋值  
    myCar.model = "Corolla";  
    myCar.year = 2020;  
  
    myCar.displayInfo(); // 调用成员函数  
  
    return 0;  
}

在这个例子中,我们创建了一个Car类的对象myCar,然后通过点操作符(.)访问它的数据成员并赋值,最后调用它的成员函数displayInfo来显示汽车的信息。 


3.对象的大小

如何计算对象的大小

 

内存对齐规则

注意:C++中对象的内存对齐规则与C语言中结构体的对齐规则是完全一致的

 

 示例:

#include<iostream>
using namespace std;
// 计算⼀下A/B/C实例化的对象是多⼤?

class A
{
public:
     void Print()
     {
     cout << _ch << endl;
     }
private:
     char _ch;
     int _i;
    };
class B
{
public:
     void Print()
     {
     //...
     }
};
class C
{};
int main()
{
     A a;
     B b;
     C c;
     cout << sizeof(a) << endl;
     cout << sizeof(b) << endl;
     cout << sizeof(c) << endl;
     return 0;
}

【C++指南】类和对象(一):类和对象的定义和使用 基础讲解-LMLPHP 


4. this指针

this 指针是 C++ 中一个非常重要的概念,它指向调用成员函数的对象。每个非静态成员函数都有一个 this 指针,它允许成员函数访问调用对象的成员变量和其他成员函数。

下面将详细讲解 this 指针的基本概念、使用规则和注意事项。

 

基本概念

使用规则

注意事项

 

结语

 

本文完,更多相关知识请关注后续文章。

 

08-27 10:58