```c
#include <reg51.h>
// 数码管码表
unsigned char code LED[] = {
0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90
}
void delay(unsigned int t) {
unsigned int i, j
for (i = 0i <ti++) {
for (j = 0j <1200j++)
}
}
void main() {
unsigned char i, cnt
// 定义P1口为输出端口
P1 = 0x00
while(1) {
cnt = 0
// 循环显示0~9
for (i = 0i <10i++) {
P1 = LED[i]
delay(500)
cnt++
if (cnt == 4) {
cnt = 0
P1 = 0
delay(500)
}
}
}
}
```
这份程序中,首先定义了静态数码管的码表,然后通过循环依次将每个数码管的码值赋值给P1口进行显示,同时凳手亩控制最后一个数码管不同步显示,即循环显示四个数码管后关闭所有数码管的显示,再等待一段时间后才开始下一轮的显示。
在具体的硬件实现中,需要将P1口连接到数码管的控制芯片的输入口上,同枣森时还需要设置好时钟等系薯差统参数。
在 C++ 中动态联编需要虚函数的支持,这是因为虚函数的工作原理决定的,而正是因为使用了虚函数来实现动态联编,也让动态联编的效率略低于静态联编。通常,编译器处理虚函数的方法是: 给每个对象添加一个隐藏成员,隐藏成员保存了一个指向函数地址数组的指针 ,这个数组就是虚函数表(virtual function table, vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址,调用虚函数时,程序橡春将查看存储在对象中的 vtbl 地址,然后转向相应的函数地址表,如果使用类声明中定义的第一个虚函数,则程序将使用数组中的第一个函数地址,并执行具有该地址的函数。虚函数这个概念是 C++ 的精华之一,遇到虚函数时要注意以下几点:
1.定义一个函数为虚函数,不代表函数为不被实现的函数(可以有自己袜如喊的实现)
2.定义它为虚函数是为了允许用基类的指针来调用子类的这个函数(提供了基类调用子类函数的方式)
3.定义一个函数为纯虚函数,代表函数没有被实现(声明后面接=0,例如:virtual func() = 0 此时派生类必须要实现此虚函数)
4.具有纯虚函数的类是抽象类,不能用于生成对告野象(即不能实例化),只能派生,它派生的类如果没有实现纯虚函数,那么他的派生类还是抽象类。虚析构函数
虚析构函数顾名思义就是将析构函数定义为虚函数。如果我们在派生中分配了内存空间,但是基类的析构函数不是虚析构函数,就会发生内存泄漏。看下面的例子:
#include <iostream>using namespace stdclass Base{public:
virtual void print(){
cout <<"This is Base's print function" <<endl
}
/* 对比加与不加 virtual 析构函数的调用情况 */
~Base(){
// virtual ~Base(){
cout <<"The destructor of Base" <<endl
}
}
class Derived : public Base{public:
void print(){
cout <<"This is Derived's print function" <<endl
}
~Derived(){
cout <<"The destructor of Derived" <<endl
}
}
int main(){
Base *p =
new Derived()
p->print()
delete p
return 0
}
不加 virtual 的运行结果:
加上 virtual 的运行结果:
在上面程序示加上 virtual 时编译器还是按照 Base 类型调用了析构函数,没有执行 Derived 类的虚析构函数,就造成了内存泄露。修改 Base 类的析构函数为虚析构函数后实现了多态,就可以确保执行正确的析构函数,完成资源的释放
public class Max{
public static void main(String[] args)
{
int i=max(15,18)
double j=max(15.0,18.0)
double k=max(15.0,18.0,14.0)
System.out.println("两个整数的最大值"+i)
System.out.println("两个双精度数的最大值"+j)
System.out.println("三个双精度数的凳渣最大值"+k)
}
private static int max(int m,int n){
return Math.max(m,n)
}
private static double max(double m,double n){
return Math.max(m,n)
}
private static double max(double m,double n,double g){
double h=Math.max(m,n)
return Math.max(h,g)
}
}
////////枣亩悄输出结果
两个整数的最大值18
两个双精度数的最大值18.0
三个双精度数的最大值18.0
////这个程序是耐陪熟悉方法的重载,你好好看看这一部分
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)