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;
}
很希望自己是一棵树,守静、向光、安然,敏感的神经末梢,触着流云和微风,窃窃的欢喜。脚下踩着最卑贱的泥,很踏实。还有,每一天都在隐秘成长。

浙公网安备 33010602011771号