类和对象的创建和实例化

1. 类的概述

1.1 具体示例

cpp 复制代码
	类是描述一类事物的特征和行为的统称,抽象的不存在的,泛指的概念,例如:描述一个人,从外观上(特征)和言行举止(行为)上进行描述
	外观上(特征):
		长头发
		蓝牙眼睛
		白皮肤
		带了美瞳
		年龄多大
		身高
		体重
		.....
	言行举止(行为):
		走路
		跑步
		说话
		学习
		打游戏
		.......

1.2 对象

是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等

1.3 程序来描述

cpp 复制代码
关键字:class   -------描述一个类
格式:
	class    类名
	{
		//外观---特征
		长头发
		蓝牙眼睛
		白皮肤
		带了美瞳
		年龄多大
		身高
		体重
		.....
		//言行举止----行为
		走路
		跑步
		说话
		学习
		打游戏
		.......
	};

例如:
	class   People
	{
		//特征
		int  eyes;
		int age;
		int height;
		int weight;
		char name[20];
		.....
		//行为
		void walk()
		{}
		void run()
		{}
		void play()
		{}
		void study()
		{}
		..........
	};

特征(属性):

指的是变量,称为类的成员变量

行为(方法):

指的是函数,称为类的成员函数

类的成员:

包含了成员变量和成员函数

1.4 创建类

1.4.1 第一种方式,直接在主程序文件中创建类

main.c
cpp 复制代码
#include "iostream"
using namespace std;

//第一种方式,直接在主程序文件中创建类
class People1
{
	int age;//年龄
	int height;//身高
	char name[20];//姓名
	//函数的实现第一种方式:在类中实现函数
	void walk()//走路的行为
	{
		cout << "走路" << endl;
	}
	void play()//玩的行为
	{
		cout << "玩耍" << endl;
	}
	void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/

void People1::study()
{
	cout << "学习" << endl;
}


int main()
{

	return 0;
}

1.4.2 分模块创建

People2.h
cpp 复制代码
#pragma once
#include "iostream"
using namespace std;

class People2
{
	int age;
	int height;
	char name[20];

	void walk()
	{
		cout << "走路" << endl;
	}
	void study()
	{
		cout << "学习" << endl;
	}

	//这个函数的实现我们换一种方式实现,我们放在people2.cpp中实现
	void play_game();


};
People2.cpp
cpp 复制代码
#include "People2.h"
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/
void  People2::play_game()
{
	cout << "玩游戏" << endl;
}

2. 实例化的两种方式

是指类的实例化(实实在在存在的),是特指的概念,例如:人类实例化对象张三、李四、王二等等

实例化的两种方式:

2.1 在栈区进行实例化

格式:

类名对象名; //类名和对象名就是标识符, 满足语法规范

例如:

People zhangsan ; //实例化zhangsan对象

People lisi;

2.1.1 通过类的对象去进行访问

(1)对象是在栈区实例化

符号:"."

格式:

对象名 . 成员 ; //访问类的成员

例如:

zhangsan.height=180;

zhangsan.walk();

main.cpp
cpp 复制代码
#include "iostream"
using namespace std;

//类和对象实例化

//第一种方式,直接在主程序文件中创建类
class People1
{
public:
	int age;//年龄
	int height;//身高
	char name[20];//姓名
	//函数的实现第一种方式:在类中实现函数
	void walk()//走路的行为
	{
		cout << "走路" << endl;
	}
	void play()//玩的行为
	{
		cout << "玩耍" << endl;
	}
	void study();//学习
};
//函数的实现第二种方式:在类外实现函数
/*
格式:
	函数返回值类型    类名  ::函数名(参数列表)
	{
		//代码
	}
*/

void People1::study()
{
	cout << "学习" << endl;
}


int main()
{
	//第一种 实例化一个People1
	People1 people1;
	people1.walk();
	people1.play();
	people1.study();
	cout << endl;

	//第二种 实例化一个People1
	People1* people2 = new People1;
	people2->walk();
	people2->play();
	people2->study();


	return 0;
}

2.2 在堆区进行实例化

格式: .

类名 * 对象名 = new 类名; //在堆区开辟类大小的空间,并用对象指向该空间

People* zhangsan = new People //注意释放空间:delete zhangsan

2.2.1 如何访问类的成员

(2)对象是在堆区实例化

符号:"->"

格式:

对象名 -> 成员 ;//访问类的成员

例如:

zhangsan->height=180;

zhangsan->walk();

main.cpp
cpp 复制代码
//第二种 实例化一个People1
	People1* people2 = new People1;
	people2->walk();
	people2->play();
	people2->study();
cpp 复制代码
#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {
        // 无参构造函数的实现
    }

    void setValue(int value) {
        data = value;
    }

    void display() {
        cout << "Value: " << data << endl;
    }


    int data;
};

int main() {
    // 在堆上创建对象
    MyClass* ptr = new MyClass();

    // 为成员变量赋值
    ptr->setValue(42);
    ptr->display();
    ptr->data = 50;
    ptr->display();

    // 释放对象所占用的内存
    delete ptr;

    return 0;
}

2.3 面试题:结构体和类的区别是什么?

仅供参考

  1. 默认访问权限:

在结构体中,默认的成员访问权限是公共的(public)。

在类中,默认的成员访问权限是私有的(private)。

  1. 成员函数:

在结构体中,你可以包含成员函数,但这些函数默认是公共的。

在类中,你可以有公共、私有和受保护的成员函数,具体取决于你在类定义中的声明。

  1. 继承:

在结构体中,可以进行继承,但默认继承权限是公共的。

在类中,可以进行公共、私有和受保护的继承,具体取决于你在类定义中的声明。

  1. 默认构造函数:

在结构体中,如果没有提供构造函数,会有一个默认的构造函数。

在类中,如果没有提供构造函数,也会有一个默认的构造函数,但是如果你提供了自定义构造函数,那么默认构造函数就不再提供。

相关推荐
C_Liu_几秒前
C++:list
开发语言·c++
my rainy days7 分钟前
C++:友元
开发语言·c++·算法
haoly198910 分钟前
数据结构和算法篇-归并排序的两个视角-迭代和递归
数据结构·算法·归并排序
微笑尅乐10 分钟前
中点为根——力扣108.讲有序数组转换为二叉搜索树
算法·leetcode·职场和发展
鄃鳕1 小时前
python 字典 列表 类比c++【python】
c++·python
im_AMBER1 小时前
算法笔记 05
笔记·算法·哈希算法
夏鹏今天学习了吗1 小时前
【LeetCode热题100(46/100)】从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
吃着火锅x唱着歌1 小时前
LeetCode 2389.和有限的最长子序列
算法·leetcode·职场和发展
嶔某1 小时前
二叉树的前中后序遍历(迭代)
算法
WWZZ20252 小时前
快速上手大模型:机器学习2(一元线性回归、代价函数、梯度下降法)
人工智能·算法·机器学习·计算机视觉·机器人·大模型·slam