首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >VC++6.0入门——第二讲 掌握c++

VC++6.0入门——第二讲 掌握c++

原创
作者头像
Arya
发布2024-11-14 09:50:29
发布2024-11-14 09:50:29
1590
举报
文章被收录于专栏:后端开发专栏后端开发专栏

文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!

今日推荐:快速上手 KSQL:轻松与数据库交互的利器

文章链接:https://cloud.tencent.com/developer/article/2465572

通过这篇文章学习并快速上手使用 KSQL。简单来说,KSQL 本质上是一个客户端工具,用于与数据库进行交互。启动后,我们可以像使用普通的 SQL 一样执行查询和操作,这将是一个很好的练习机会。

引出


VC++6.0入门——第二讲 掌握c++

第二讲 掌握c++

在C语言中,我们可以定义结构体类型,将多个相关的变量包装为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函数。

c++多态

C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类,就调用基类的函数。

加入virtual 关键字

加入virtual 关键字,c++中的多态性

当C++编译器在编译的时候,发现Animal类的sleep()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。

纯虚函数

纯虚函数是指被标明为不具体实现的虚成员函数(注意:纯虚函数也可以有函数体,但这种提供函数体的用法很少见)。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。

引用和指针变量的内存模型

源码

代码语言: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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引出
  • 第二讲 掌握c++
    • c++多态
      • 纯虚函数
      • 引用和指针变量的内存模型
    • 源码
      • 添加已有文件到工程的方式
    • 报错
    • 编译过程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档