引出
VC++学习(2)——初步掌握C++,认识VC++程序编译过程及原理
C++是一门编程语言,他的语法标准和语言特性是全球统一的
VC++是微软在C++语言基础上加入了自己公司扩展的一些东西
VC++是基于微软开发的编译器系统(例如Visual C++ 6.0编译系统,visual studio)和windows操作系统,也就是说你离开微软的编译环境是没有办法进行VC++开发的
VC++可以简单的视为 :
C++语言+微软扩展的语法规则+微软扩展的功能特性+微软自己开发的编译环境+windows操作系统 的一个混杂的复合体
第二讲 掌握c++
c++多态
加入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
编译过程
编译,然后链接
总结
VC++学习(2)——初步掌握C++,认识VC++程序编译过程及原理