如果一个派生类的派生符是public 则 ,将基类称为 父类,派生类称为子类,
C++ 允许,父类的指针直接指向子类的对象,或者父类引用子类:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class point{
int x;
int y;
public:
point(int x,int y):x(x),y(y){}
void show(){ cout<<"point"<<endl;}
};
class circle:public point{
int r;
public:
void show(){ cout<<"circle"<<endl;}
circle(int x,int y,int r):point(x,y),r(r){}
};
int main()
{
circle c(1,2,3);
point * p=&c;
c.show();
p->show();
system("pause");
return 0;
}
如果一个函数被声明为基类的友元,则该友元内部的基类指针,也可以指向派生类的对象,即
对于基类的友元而言,在友元内部,基类被当做父类。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class point{
int x;
int y;
public:
point(int x,int y):x(x),y(y){}
void show(){ cout<<"point"<<endl;}
friend void f1();
void f2();
};
class circle:point{
int r;
public:
void show(){ cout<<"circle"<<endl;}
circle(int x,int y,int r):point(x,y),r(r){}
};
circle c(1,2,3);
void f1()
{
point *p=&c;
p->show();
}
/*void f2()
{
point *p=&c;//f2不能访问
p->show();
} */
int main()
{
f1();
//f2(); f2不能访问
system("pause"); return 0; }
做个补充:父子类可以做下面这四件事(和上面的第一个冲突):
1:子类的对象可以给父类赋值。 赋值效果,基类数据成员和派生类中数据成员的值相同
2:子类的对象可以初始化父类的引用
3:父类的指针可以指向子类的地址
4:函数的参数是父类的引用时,当函数调用时,可以将子类的对象作为实参
#include<iostream>
#include<stdio.h>
#include<string>
#include<stdlib.h>
using namespace std;
class base{
string name;
public:
void show();
base(string name):name(name){}
};
void base::show()
{
cout<<"base->"<<base::name<<endl;
}
class son:public base{
public:
void show();
son(string name):base(name){}
};
void son::show()
{
cout<<"son"<<endl;
}
void f(base & fa)
{
fa.show();
}
int main()
{
son a("guo");
a.show();
base b(a);
b.show();
//son c(b);
base & c=a;
c.show();
base * d=&a;
d->show();
f(a);
system("pause");
}
原文链接: https://www.cnblogs.com/cs1003/archive/2012/12/19/2825453.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/73023
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!