看到書上的代碼之后,產生了一些疑問,還請大佬指教一下
程序如下:
#include<iostream>
using namespace std;
class Base1{
public:
virtual void display()const;
};
void Base1::display()const{
cout<<"Base1::display()"<<endl;
}
class Base2:public Base1{
public:
void display()const;
};
void Base2::display()const{
cout<<"Base2::display()"<<endl;
}
class Derived:public Base2{
public:
void display()const;
};
void Derived::display()const{
cout<<"Derived::display()"<<endl;
}
void fun(Base1 *ptr){
ptr->display();
}
int main()
{
Base1 base1;
Base2 base2;
Derived derived;
fun(&base1);
fun(&base2);
fun(&derived);
return 0;
}
這是書上講虛函數的時候的那道例題
………………………………………………………………………………………………………………………………………………………………………………………………………………
第一個疑問:
我把虛函數去掉,想試用一下賦值兼容規則,程序變成了下面的樣子
#include<iostream>
using namespace std;
class Base1{
public:
void display()const;
};
void Base1::display()const{
cout<<"Base1::display()"<<endl;
}
class Base2:public Base1{
public:
void display()const;
};
void Base2::display()const{
cout<<"Base2::display()"<<endl;
}
class Derived:public Base2{
public:
void display()const;
};
void Derived::display()const{
cout<<"Derived::display()"<<endl;
}
void fun(Base1 *ptr){
ptr->display();
}
int main()
{
Base1 base1;
Base2 base2;
Derived derived;
fun(&base1);
fun(&base2);
fun(&derived);
return 0;
}
但是吶,運行結果不盡人意
因為吶,書上將賦值兼容規則的時候是把display()聲明為內聯函數的,這里我就不是很明白為什么會這樣了……還請大佬指導一下
……………………………………………………………………………………………………………………………………………………………………………………………………
第二個問題
我把第12行和14行的const去掉了
#include<iostream>
using namespace std;
class Base1{
public:
virtual void display()const;
};
void Base1::display()const{
cout<<"Base1::display()"<<endl;
}
class Base2:public Base1{
public:
virtual void display ();
};
void Base2::display(){
cout<<"Base2::display()"<<endl;
}
class Derived:public Base2{
public:
void display()const ;
};
void Derived::display()const{
cout<<"Derived::display()"<<endl;
}
void fun(Base1 *ptr){
ptr->display();
}
int main()
{
Base1 base1;
Base2 base2;
Derived derived;
fun(&base1);
fun(&base2);
fun(&derived);
return 0;
}
結果就變化了……這個也請大佬講解一下