C++中的virtual关键字是什么?怎么用?

简单 详细都可以 谢谢
2024-11-15 01:54:53
推荐回答(5个)
回答1:

virtual是定义C++中虚函数的关键字 。

1、virtual关键字的作用:

c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要功能是实现动态绑定。

2、virtual关键字的使用情况:

virtual可用来定义类函数和应用到虚继承。

友元函数 构造函数 static静态函数 不能用virtual关键字修饰;

普通成员函数 和析构函数 可以用virtual关键字修饰。

3、virtual关键字的效果:

class GrandFather //祖父类

{  

public:  

GrandFather() {}  //构造函数

virtual void fun()  //虚函数声明定义

{  

cout << "GrandFather call function!" << endl;  

}  

};  

class Father : public GrandFather//父类,公有继承祖父类 

{  

public:  

Father() {}  //构造函数

void fun()   //fun函数声明定义

{  

cout << "Father call function!" << endl;  

}  

};  

class Son : public Father  //子类,公有继承父类

{  

public:  

Son() {}  //构造函数

void fun()  //fun函数声明定义

{  

cout << "Son call function!" << endl;  

}  

};  

void print(GrandFather* father) //输出函数 ,祖父类形参

{  

father->fun();  //调用fun函数

}  

int _tmain(int argc, _TCHAR* argv[])  

{  

Father * pfather = new Son;//建立一个父类的指针让它指向子类

pfather->fun();  

GrandFather * pgfather = new Father;  

print(pgfather); //祖父类指针变量 

return 0;  }  

4、virtual的继承性:

只要基函数定义了virtual,继承类的该函数也就具有virtual属性;即 GrandFather, Father ,Son同时定义virtual void fun()与GrandFather一个定义virtual void fun效果是一样的。

扩展资料

vitual关键字的用途:

1、vitual基类

在多重继承中,从派生类到基类存在多条路线时(多个继承脉络或者途径),一个这种派生类的对象实例化将包含多个基类对象,浪费资源且调用混乱的现象出现。

因此引入了vitual baseclass,来在运行阶段克服多个基类对象的产生。这个vitual是在运行阶段保证对象唯一性的。

2.vitual函数

虚函数的出现,是由于基类的指针可以执行派生类,因此引出了不便,引入vitual函数,来告诉编译器,出现这种情况时,在运行时动态链接进行处理。

3.vitual在纯虚函数中使用

纯虚函数完全是为了继承体系的完整,也是集成vitual函数的作用而产生的。代表了编译器阶段对象的绑定,将调用选择转移到运行时动态绑定。

综上:vitual关键的引入,可以理解为阻止编译阶段的静态绑定,将绑定(虚函数)和约束工作(虚基类)转移到运行时动态处理。


参考资料:百度百科——virtual

回答2:

virtual是定义C++中虚函数的关键字 。

在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态联编。

一、概念

1、以继承为前提。

2、在父类中用virtual修饰函数。

3、在子类中重写该虚函数。

二、作用

1、以父类的引用作为函数的参数类型。

2、调用该函数传递子类对象。

3、在函数中可以通过该父类的引用调用到子类中重写的虚函数。

三、用法

class 类名{
public:
virtual 成员函数说明;
}

class 类名:基类名{
public:
virtual 成员函数说明;
}

扩展资料

定义虚函数的限制:

(1)非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。

因为,将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。

(2)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。

(3)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数(函数名相同、参数列表完全一致、返回值类型相关)自动成为虚函数。

(4)如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。

参考资料来源:百度百科—virtual

回答3:

virtual是定义C++中虚函数的关键字 。

在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态联编。

用法:

class Base

{

public:Base(){}

public:

virtual void print(){cout<<"Base";}

}; 

class Derived:public Base

{

public:Derived(){}

public:

void print(){cout<<"Derived";}

}; 

int main()

{

Base *point=new Derived();

point->print();

}

Output:

Derived 

扩展资料

C++11 关键字共73个。

新增关键字:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。

export 因为实现支持太少(仅Edison Design Group的前端支持),编译效率低下,取消原有意义(仍是关键字,但使用它的程序是错误的),改为保留给未来标准使用。

1、alignas

alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型。和sizeof类似,两者的操作数都不被求值。

2、constexpr

类似const但更强大,修饰函数或对象,表示函数结果或对象是编译时决定的常量,以便优化。(const不能修饰一般的函数,也不一定指定声明的对象能编译期的常量表达式,更可能只是只读对象。而在C语言中,const完全只能指定只读对象。)

3、char16_t 和 char32_t

二者分别表示16位字符型和32位字符型,类似char和wchar_t,也是一般只专用于表示字符的整数类型,且设计上用于表示Unicode字符。char16_t和char32_t是C++11新增的,以克服wchar_t在不同平台上无法保证确定宽度的缺点。

参考资料来源:百度百科--virtual

回答4:

C++中的virtual关键字是定义C++中虚函数的关键字 。

在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态联编。

virtual的作用:

(1)以父类的引用作为函数的参数类型。

(2)调用该函数传递子类对象。

(3)在函数中可以通过该父类的引用调用到子类中重写的虚函数。

扩展资料

C++语言工作原理

C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。

生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序的编写是正确的,那么通常只需按一个功能键,即可搞定这个过程。该过程实际上分成两个步骤。

第一步是对程序进行编译,这需要用到编译器(compiler)。编译器将C++语句转换成机器码(也称为目标码);如果这个步骤成功,下一步就是对程序进行链接,这需要用到链接器(linker)。

链接器将编译获得机器码与C++库中的代码进行合并。C++库包含了执行某些常见任务的函数(“函数”是子程序的另一种称呼)。

例如,一个C++库中包含标准的平方根函数sqrt,所以不必亲自计算平方根。C++库中还包含一些子程序,它们把数据发送到显示器,并知道如何读写硬盘上的数据文件。

参考资料:百度百科——virtual

回答5:

是定义C++中虚函数的关键字。

演示使用的代码:

class Base

{

public:Base() {}

public:

virtual void print() { cout << "Base"; }

};

class Derived :public Base

{

public:Derived() {}

public:

void print() { cout << "Derived"; }

};

void main() {

Base *point = new Derived();

point->print();

getchar();

}

代码截图:

扩展资料:

虚函数的定义

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。

虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。

即:指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。

参考资料:百度百科-虚函数

参考资料:百度百科-virtual