下面 C++ 代码的运行结果为() #include<iostream> using namespace std; class Base { public:     Base(int value) : m_value(value) {}     virtual void add(int value) {         m_value += value;     }     virtual void print() {         cout << “Base: ” << m_value << endl;     } private:     int m_value; }; class Drive :public Base { public:     Drive(int value) : m_value(value) {}     virtual void print() {         std::cout << “Drive: ” << m_value << std::endl;     } private:     int m_value; }; int main() {     Drive d(1);     d.add(2);     d.print();     return 0; }

区块链毕设网qklbishe.com为您提供问题的解答

下面 C++ 代码的运行结果为()
#include<iostream> using namespace std;  class Base { public:     Base(int value) : m_value(value) {}     virtual void add(int value) {         m_value += value;     }     virtual void print() {         cout << "Base: " << m_value << endl;     } private:     int m_value; };  class Drive :public Base { public:     Drive(int value) : m_value(value) {}     virtual void print() {         std::cout << "Drive: " << m_value << std::endl;     } private:     int m_value; };  int main() {     Drive d(1);     d.add(2);     d.print();     return 0; }
这部分内容主要涉及c++的继承 虚函数机制。
在默认的情况,基类和派生类可以具有重名的成员变量和成员方法。
前者是两个独立的变量,需要分别进行初始化处理。方法可以通过重写来实现不同的处理。
第29行声明的Drive类型 变量d会同时具有基类Base和派生类Drive的m_value成员变量。
Drive类的m_value通过它的构造函数进行初始化,可以正常。
而Base附带的m_value也需要初始化,但是Base类当中并没有无参的默认初始化构造函数,而是一个需要参数的构造函数。

 Base(int value) : m_value(value) {}

在我们声明派生类的时候,如果基类的成员变量需要初始化,如果我们没有显式调用基类的初始化构造函数,

Drive(int value) : m_value(value) {}

则会调用基类的默认初始化构造函数(也就是无参那种) 对Base的成员变量进行初始化,
但是在这个例子当中Base的构造函数是有参的,所以是没法按照默认的初试化。
应该写成这样,手动调用基类的构造函数。

Drive(int value) : m_value(value), Base(value) {} ;

才能正常运行。

(后面是我修改后代码的运行逻辑)
这样的话,基类的value初试化为1, Drive的初试化为1.
add方法调用时,因为是基类方法,所以访问基类变量,value变成3.
print的时候,根据实际的变量类型调用print,
是drive类型则调用drive的print,输出drive的value为1.

48:41

以上就是关于问题下面 C++ 代码的运行结果为() #include<iostream> using namespace std; class Base { public:     Base(int value) : m_value(value) {}     virtual void add(int value) {         m_value += value;     }     virtual void print() {         cout << “Base: ” << m_value << endl;     } private:     int m_value; }; class Drive :public Base { public:     Drive(int value) : m_value(value) {}     virtual void print() {         std::cout << “Drive: ” << m_value << std::endl;     } private:     int m_value; }; int main() {     Drive d(1);     d.add(2);     d.print();     return 0; }的答案

欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 下面 C++ 代码的运行结果为() #include<iostream> using namespace std; class Base { public:     Base(int value) : m_value(value) {}     virtual void add(int value) {         m_value += value;     }     virtual void print() {         cout << “Base: ” << m_value << endl;     } private:     int m_value; }; class Drive :public Base { public:     Drive(int value) : m_value(value) {}     virtual void print() {         std::cout << “Drive: ” << m_value << std::endl;     } private:     int m_value; }; int main() {     Drive d(1);     d.add(2);     d.print();     return 0; }