一些疑問


看到書上的代碼之后,產生了一些疑問,還請大佬指教一下
程序如下:

#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;
}

結果就變化了……這個也請大佬講解一下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM