C++——virtual的一些理解

 

一、子类实例化调用方法

#include<iostream>
using namespace std;
class A
{
public:
	void print()
	{
		cout << "This is A" << endl;
	}
};

class B : public A
{
public:
	void print()
	{
		cout << "This is B" << endl;
	}
};

class C : public A
{
public:
	void print()
	{
		cout << "This is C" << endl;
	}
};

int main()
{
	A a;
	B b;
	C c;
	a.print();
	b.print();
	c.print();
	return 0;
}

  

二、父类调用方法(非virtual)、

#include<iostream>
using namespace std;
class A
{
public:
	void print()
	{
		cout << "This is A" << endl;
	}
};

class B : public A
{
public:
	void print()
	{
		cout << "This is B" << endl;
	}
};

class C : public A
{
public:
	void print()
	{
		cout << "This is C" << endl;
	}
};

int main()
{
	//为了在以后便于区分,我这段main()代码叫做main2
	A a;
	B b;
	C c;
	A *p1 = &a;
	A *p2 = &b;
	A *p3 = &c;

	p1->print();
	p2->print();
	p3->print();
	return 0;
} 

 

三、添加virtual实现多态

#include<iostream>
using namespace std;
class A
{
public:
	virtual void print()
	{
		cout << "This is A" << endl;
	}
};

class B : public A
{
public:
	void print()
	{
		cout << "This is B" << endl;
	}
};

class C : public A
{
public:
	void print()
	{
		cout << "This is C" << endl;
	}
};

int main()
{
	A a;
	B b;
	C c;
	A *p1 = &a;
	A *p2 = &b;
	A *p3 = &c;

	p1->print();
	p2->print();
	p3->print();
	return 0;
}

  

四、子类调用方法,在方法中访问父类成员变量

#include<iostream>
#include<string>
using namespace std;
class A
{
public:
	A(const string& _name){
		name = _name;
	}
	void print()
	{
		cout << "This is " << name << endl;
	}
protected:
	string name;
};

class B : public A
{
public:
	B(const string &_name, int _a) :A(_name), a(_a) {};
	void print()
	{
		cout << "This is " << name << endl;
	}
private:
	int a;
};


class C : public A
{
public:
	void print()
	{
		cout << "This is C" << endl;
	}
};

int main()
{
	//为了在以后便于区分,我这段main()代码叫做main2
	A a("A");
	B b("B", 2);

	A *p1 = &a;
	A *p2 = &b;


	p1->print();
	p2->print();
	return 0;
}

  

 

posted @ 2024-12-18 08:52  晓乎  阅读(52)  评论(0)    收藏  举报
总访问: counter for blog 次