【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

简介: <p></p> <h1>递归汉诺塔 双层递归</h1> <pre name="code" class="java">#include <iostream>void han(int n, char A, char B, char C){ static int num = 1; std::cout << "第" << num <<

递归汉诺塔 双层递归

#include <iostream>

void han(int n, char A, char B, char C)
{
	static int  num = 1;
	std::cout << "第" << num << "次";
	num++;
	if (n<1)
	{
		return;
	} 
	else
	{
		han(n - 1, A, C, B);
		std::cout << A << "->" << C << std::endl;
		han(n - 1, B, A, C);
	}
}

//  f(n)=2*f(n-1)+1 //f(n)=2^n-1
//2^64- 1
void main()
{
	int n;
	std::cin >> n;
	std::cout << "n=" << n << std::endl;
	han(n, 'A', 'B', 'C');
	std::cin.get();
	std::cin.get();
}

CPP结构体 

#include<iostream>

struct lstruct
{
	int num;
};

struct MyStruct
{
	int num;
	double db=10.8;//默认的值
	//MyStruct sx;//拒绝内部定义自己
	MyStruct *pnext;
	MyStruct *phead;
	lstruct  l1;
	void boss()
	{

	}
};

struct MyStructA
{
	int num;
	double db = 10.8;//默认的值
	//MyStruct sx;//拒绝内部定义自己
	MyStruct *pnext;
	MyStruct *phead;
	lstruct  l1;
	void boss()
	{

	}
};

struct 
{
	int num;
	double db ;//默认的值
	MyStruct boss1;
}sx,sy;//匿名结构体不允许初始化

void main()
{
	MyStruct s1;//自动管理
	MyStruct *pnew = new MyStruct;//手动
	s1.l1.num;
	//pnew->l1.num;
	(*pnew).l1.num;
	//类型相同可以整体赋值
	//结构体C++风格初始化方式
	MyStruct s2(s1);
	MyStruct *pnew2(new MyStruct);
	MyStructA sa1;
	//MyStruct s3(sa1);C++强类型,必须类型匹配
}

void main1()
{
	MyStruct  s1;
	std::cout << s1.db << std::endl;
	sx.boss1.num;//结构体嵌套就是...
	std::cin.get();
}

面向过程与面向对象的编程模式

C管理进程

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<windows.h>

//面向过程的模式
//代码重用主要靠函数
//权限,

void open(const char *path,const int mode)
{
	ShellExecuteA(0, "open", path, 0, 0, mode);
}

void all()
{
	system("tasklist");
}

void closebyname(const char *name)
{
	char cmdstr[100] = { 0 };
	sprintf(cmdstr, "taskkill /f /im %s", name);
	system(cmdstr);
}

void closebypid(const int num)
{
	char cmdstr[100] = { 0 };
	sprintf(cmdstr, "taskkill /pid %d", num);
	system(cmdstr);
}


void main1()
{
	all();
	open("notepad", 1);
	all();
	Sleep(2000);
	int  num;
	scanf("%d", &num);
	closebypid(num);
	//closebyname("notepad.exe");
	system("pause");
}
//复数a+bi
struct fu
{
	int a;
	int b;
};

//a+ bi,
struct fu  add(struct fu  fu1, struct fu  fu2)
{
	struct fu  fu3;
	fu3.a = fu1.a + fu2.a;
	fu3.b = fu1.b + fu2.b;
	return fu3;
}

void   main3()
{
	//数据可以随便被别人,可以随便被修改
	struct fu  fu1 = { 3, 4 };
	struct fu  fu2 = { 13, 4 };
	fu1.a += 3;
	struct fu  fu3 = add(fu1, fu2);
	printf("%d+%di", fu3.a, fu3.b);
	getchar();
}

面向对象管理进程

#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include <windows.h>

//C++类的继承实现代码重用, C重用   函数
//类的封装实现权限,封装,数据与代码合为一体。C封装主要是函数
//封装可以锁定代码的权限,锁定的数据的权限,避免被随意修改
//类的多态,一个接口根据实际需求完成很多不同的功能

class cmduse
{
private:
	char cmduser[100];//用户名
	char cmd[100];//存储指令
public:
	void setuser(const char * name)
	{
		strcpy(cmduser, name);
	}
	char * getuser()
	{
		return this->cmduser;//返回用户名
	}
	void open(const char *path, const int mode)
	{
		ShellExecuteA(0, "open", path, 0, 0, mode);
	}
	void all()
	{
		system("tasklist");
	}
	void closebyname(const char *name)
	{
		memset(this->cmd, 0, 100);//清空字符串
		sprintf(this->cmd, "taskkill /f /im %s", name);
		system(this->cmd);
	}
	void closebypid(const int num)
	{
		memset(this->cmd, 0, 100);//清空字符串
		sprintf(this->cmd, "taskkill /pid %d", num);
		system(this->cmd);
	}
};

void main2()
{
	cmduse cmduse1;
	cmduse1.setuser("yincheng");
	std::cout << cmduse1.getuser() << std::endl;
	cmduse1.open("calc",1);
	cmduse1.open("notepad",0);
	Sleep(2000);
	cmduse1.all();
	cmduse1.closebyname("calc");
	int pid;
	std::cin >> pid;
	cmduse1.closebypid(pid);//根据编号关闭

	std::cin.get();
	std::cin.get();
	//closebypid(100);

}

//封装可以实现代码权限,不可以随便调用
class 
{
public:
	void seta(int a)
	{
		//接口
		this->a = a;
	}
	int geta()
	{
		return this->a;
	}
	void setb(int b)
	{
		//接口
		this->b = b;
	}
	int getb()
	{
		return this->b;
	}

protected:

private:
	int a;
	int b;
	char password[100];
}myab;

void main()
{

//	myab.geta = 3;
	myab.seta(10);
	//封装解决的问题
	//类的,代码与数据,一体化
    //代码的封装,限定代码谁可以执行谁不可以执行的权限
	//数据的封装,防止数据被意外修改
}

类的常识共用体实现一个类的特征

#include<iostream>

//union  本质也是一个类,可以内部有函数,
//union,内部数据是共享,不同对象之间是独立的,代码是共享
//union,也具备结构体所有功能
//某些节约内存的类需要用到共用体
union MyUnion
{
	int num;
	double db;
	void go()
	{

	}
};
//内部数据是共享内存,不可以继承
union MyUnionA 
{
	int num;
	double db;
	void go()
	{

	}
};

void main()
{
	std::cout << sizeof(MyUnion) << std::endl;
	MyUnion union1;
//	union1.db = 10;
	union1.num = 20;
	std::cout << union1.num << std::endl;
	union1.db = 10.9;//时时刻刻共用体仅有一个变量存在

	std::cout << union1.num << std::endl;
	std::cin.get();	
}

QT应用于类以及类的常识

空类

#include<iostream>

//空类占一个字节,表明类存在
//空类有int,占4个,
//
class kong
{
public:
	//int num;

	void go(int  num)
	{
		std::cout << "锄禾日当午";
     }
};

void main()
{
	std::cout << sizeof(kong) << std::endl;
//	std::cout << &kong << std::endl;
	kong  kong1;
	//kong1.num = 10;
	std::cout << &kong1 << std::endl;

	std::cin.get();
}

Qtobj

#include "dialog.h"
#include <QApplication>

class bigsmall
{
    Dialog  *p;
public:
    void setp(Dialog  *p)
    {
        this->p=p;
    }
    void set(int x,int y)
    {
        this->p->resize(x,y);//设置大小

    }
    void big()
    {
        for(int i=0;i<600;i++)
        {
             this->p->resize(i,i);
        }
    }
    void small()
    {
        for(int i=600;i>=0;i--)
        {
             this->p->resize(i,i);
        }
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//    Dialog  mydialog1,mydialog2;

   // mydialog1.show();
   // mydialog2.show();

   Dialog  *pd1,*pd2;
   pd1=new Dialog;
   pd2=new Dialog;
  // pd1->show();
  // pd2->show();
   pd1->resize(800,600);

   pd2->resize(600,800);

   (*pd1).show();
   (*pd2).show();

   bigsmall  bigsmall1;
   bigsmall1.setp(pd1);
   bigsmall1.big();
   bigsmall1.small();

   bigsmall  bigsmall2;
   bigsmall2.setp(pd2);
   bigsmall2.big();
   bigsmall2.small();

   //delete pd1;
  // delete pd2;

    return a.exec();
}







目录
相关文章
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
284 19
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
482 13
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
412 5
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
344 5
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
316 5
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
293 4
|
设计模式 IDE 编译器
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
本项目旨在通过C++编程实现一个教学游戏,帮助小朋友认识动物。程序设计了一个动物园场景,包含Dog、Bird和Frog三种动物。每个动物都有move和shout行为,用于展示其特征。游戏随机挑选10个动物,前5个供学习,后5个用于测试。使用虚函数和多态实现不同动物的行为,确保代码灵活扩展。此外,通过typeid获取对象类型,并利用strstr辅助判断类型。相关头文件如&lt;string&gt;、&lt;cstdlib&gt;等确保程序正常运行。最终,根据小朋友的回答计算得分,提供互动学习体验。 - **任务描述**:编写教学游戏,随机挑选10个动物进行展示与测试。 - **类设计**:基类
259 3
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
232 12
|
存储 安全 编译器
【C++核心】一文理解C++面向对象(超级详细!)
这篇文章详细讲解了C++面向对象的核心概念,包括类和对象、封装、继承、多态等。
328 2
|
存储 编译器 C语言
【C++】初识面向对象:类与对象详解
【C++】初识面向对象:类与对象详解
209 0