文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!
今日推荐:快速上手 KSQL:轻松与数据库交互的利器
文章链接:https://cloud.tencent.com/developer/article/2465572
通过这篇文章学习并快速上手使用 KSQL。简单来说,KSQL 本质上是一个客户端工具,用于与数据库进行交互。启动后,我们可以像使用普通的 SQL 一样执行查询和操作,这将是一个很好的练习机会。
VC++6.0入门——第二讲 掌握c++
在C语言中,我们可以定义结构体类型,将多个相关的变量包装为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函数。
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类,就调用基类的函数。
加入virtual 关键字
加入virtual 关键字,c++中的多态性
当C++编译器在编译的时候,发现Animal类的sleep()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。
纯虚函数是指被标明为不具体实现的虚成员函数(注意:纯虚函数也可以有函数体,但这种提供函数体的用法很少见)。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。
#include <iostream.h>
class Animal
{
public:
Animal(int height,int weight)
{
cout<<"Animal 构造函数"<<endl;
}
~Animal()
{
cout<<"Animal 析构函数"<<endl;
}
void eat()
{
cout<<"eat"<<endl;
}
// 加virtual关键字,定义为虚函数
virtual void sleep()
{
cout<<"sleep"<<endl;
}
};
class Fish: public Animal
{
public:
Fish():Animal(400,300),a(1) // 成功构造Animal
{
cout<<"fish 构造函数"<<endl;
}
~Fish()
{
cout<<"fish 析构函数"<<endl;
}
void sleep()
{
cout<<"鱼睁着眼睛 sleep"<<endl;
}
private:
const int a; // 常量
};
void fn(Animal *pan)
{
pan->sleep();
}
void main()
{
Fish sh;
sh.sleep();
Animal *pan; // 指针
pan = &sh;
fn(pan); // 调用的animal的
}
原因:一个类被定义了多次,例如在类A的头文件中#include"B.h",同时又在类A的cpp文件中再次#include"B.h"
解决方法:在文件头加上了"#pragma once”,防止某个头文件被多次include,保证头文件被编译一次。用#ifndef,#define,#endift也可以用来防止重定义。
#pragma once
编译,然后链接
从这个输出中,我们可以看到可执行程序EX10.exe的产生,经过了两个步骤:首先, C++编译器对工程中的三个源文件EX10.cpp、fish.cpp、animal.cpp单独进行编译(Compiling)。在编译时,先由预处理器对预处理指令(#include、#define和if)进行处理,在内存中输出翻译单元(一种临时文件)。编译器接受预处理的输出,将源代码转换成包含机器语言指令的三个目标文件(扩展名为obj的文件):EX10.obj、fsh.obj animal..obj。注意,在编译过程中,头文件不参与编译;在EX10工程的Debug目录下,我们可以看到编译生成的obj文件。接下来是链接过程(Linking..),链接器将目标文件和你所用到的C++类库文件一起链接生成EX10.exe。整个编译链接的过程如图2.18所示。
VC++6.0入门——第二讲 掌握c++
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。