C++ 类和对象基础

1. 初步认识面向对象与面向过程

C语言是面向过程的语言, 关注的是解决问题的过程

比如, 首先对问题进行拆解,然后用函数的方式对每个部分逐个实现,最后通过函数之间的相互调用将问题解决

C++是面向对象的, 关注的是对象, 如何从一个问题中抽离出不同的对象,然后靠对象之间的交互解决问题

最后需要注意的是: 面向对象和面向过程并不是程序设计语言而是解决问题的方式

2. 类的引入

在C语言中结构体只能包含变量, 而C++使用struct定义变量和函数, 如下图

如图, 在结构体Stack定义函数Init, 编译器没有报错, 这是因为C++把struct升级为了类

3. 类的定义

虽然可以用struct关键字来定义类, 但是在C++中更喜欢用class来定义

class定义类的语法

// 类名 test
class ClassName
{
	// 成员函数func
	void func()
	{
		cout << "test" << endl;
	}
	// 成员变量a
	int a;
};

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略

类体中内容称为类的成员:类中的变量称为类的属性或成员变量, 类中的函数称为类的方法或者成员函数

类定义的两种方式

1. 将类的声明和定义全部放在类中

typedef int DataType;
struct Stack
{
    void Init(size_t capacity)
    {
        _dys = (DataType*)malloc(sizeof(DataType) * capacity);
        if (nullptr == _dys)
        {
            perror("malloc申请空间失败");
            return;
        }

        _capacity = capacity;
        _size = 0;
    }

    DataType* _dys;
    size_t _capacity;
    size_t _size;
};

2. 在类中声明,将成员函数放在类外进行定义,但是注意放在类外定义的成员函数需要加类名::

(注)加类名::, 是告诉编译Init是Stack类中的一个成员函数

4. 类的实例化

使用类创建对象就是类的实例化

#include <iostream>
using namespace std;

struct test1
{
	void func()
	{
		cout << "test1" << endl;
	}
};

int main()
{
	test1 t1; // 用类实例化 对象t1
}

同时一个类可以创建多个对象

如何理解类和对象 ?

类只是用来描述对象的, 不会分配实际的内存空间,而对象是真正的实体,会占用实际的内存空间

可以把类理解为房子的建筑设计图, 而对象是房子实体, 房子的建筑设计图可以创建多个房子

5. 访问权限

首先看两个例子, 如下图

出现这个问题的原因是, class中定义的成员默认是私有的, 不能在类外使用类的成员

而struct定义的成员默认是公有的, 可以使用test1类中的成员函数func, 所以没有报错

 

解决这个问题, 只需要在类中声明一个访问限定符public, 表示类中的成员是共有的, 在类外可以使用, 如下图

接下来详解说明访问限定符

访问限定符分 public(共有), private(私有), protected(保护的)

  • public修饰的成员在类外可以直接被访问
  • protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
  • 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  • 如果后面没有访问限定符,作用域就到}即类结束。
  • class的默认访问权限为private,struct为public(因为struct要兼容C)

 

posted @ 2023-04-26 10:24  许木101  阅读(67)  评论(0)    收藏  举报