类和对象的创建和实例化

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. 默认构造函数:

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

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

相关推荐
CodeWithMe7 分钟前
【C/C++】EBO空基类优化介绍
开发语言·c++
凌辰揽月20 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
lifallen26 分钟前
深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
java·开发语言·数据结构·算法·排序算法
jingfeng51427 分钟前
数据结构排序
数据结构·算法·排序算法
k要开心27 分钟前
从C到C++语法过度1
开发语言·c++
whoarethenext38 分钟前
使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
c语言·c++·opencv
能工智人小辰1 小时前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法
kingmax542120081 小时前
CCF GESP202503 Grade4-B4263 [GESP202503 四级] 荒地开垦
数据结构·算法
岁忧1 小时前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
sql·算法·leetcode
梦星辰.1 小时前
VSCode CUDA C++进行Linux远程开发
linux·c++·vscode