c++基础

指针篇

函数指针和指针函数

详解
1.指针函数
本质是一个函数,返回一个指针变量

ret *func(..., ...);

注意:避免返回局部变量的指针,需要用static将局部变量变成全局的。
2.函数指针
本质是一个指针,指针指向代码段中函数初始入口地址(函数名代表入口地址)。

ret (*p)(..., ...)//定义 (p代表函数名即入口地址,*p代表指针储存即入口地址)
//eg
int (*p)(int,int);
int max (int a,int b);
{return a+b;}
//初始化
p=max;
//调用
int a=p(10,5);//正确
int b=(*p)(10,5);//正确
int c=max(10,5);//正确
int d=(*max)(10,5);//正确
int f= *p(10,5);//编译器报错:*的操作数必须是指针

练习题
https://www.nowcoder.com/question/next?pid=32486731&qid=143503&tid=47159725

继承篇

3种访问权限

访问权限publicprotectedprivate
对本类可见可见可见
对子类可见可见不可见
对调用方可见不可见不可见

<注意>不可见是指无法直接调用,可以通过子类中继承的父类的公有成员函数来访问父类的私有成员

3种继承方式

  1. 三种继承方式不影响子类对父类的访问权限,子类对父类只看父类的访问控制权。下面三种继承方式都能访问父类中的public和protected成员。
  2. 继承方式是为了控制子类(也称派生类)的调用方(也叫用户)对父类(也称基类)的访问权限。
  3. public、protected、private三种继承方式,相当于把父类的public访问权限在子类中变成了对应的权限。 如protected继承,把父类中的public成员在本类中变成了protected的访问控制权限;private继承,把父类的public成员和protected成员在本类中变成了private访问控制权。

版权声明:继承篇内容为CSDN博主「luoweifu」的原创文章
原文链接:https://blog.csdn.net/luoweifu/article/details/46953343

virtual

在这里插入图片描述
不能声明为虚函数的函数
1,普通函数(非成员函数):定义虚函数的主要目的是为了重写达到多态,所以普通函数声明为虚函数没有意义,因此编译器在编译时就绑定了它。
2,静态成员函数:静态成员函数对于每个类都只有一份代码,所有对象都可以共享这份代码,他不归某一个对象所有,所以它也没有动态绑定的必要。,
3,内联成员函数:内联函数本就是为了减少函数调用的代价,所以在代码中直接展开。但虚函数一定要创建虚函数表,这两者不可能统一。另外,内联函数在编译时被展开,而虚函数在运行时才动态绑定。
4,构造函数:这个原因很简单,主要从语义上考虑。因为构造函数本来是为了初始化对象成员才产生的,然而虚函数的目的是为了在完全不了解细节的情况下也能正确处理对象,两者根本不能“ 好好相处 ”。因为虚函数要对不同类型的对象产生不同的动作,如果将构造函数定义成虚函数,那么对象都没有产生,怎么完成想要的动作??
5,友元函数:当我们把一个函数声明为一个类的友元函数时,它只是一个可以访问类内成员的普通函数,并不是这个类的成员函数,自然也不能在自己的类内将它声明为虚函数。

注意:友元本身可以是虚函数!!
如果一个类的友元函数是另一个类成员函数,那么它在自己的类内可以被声明为虚函数。

拷贝构造函数

拷贝构造函数会在以下情况下调用
1.一个对象以值传递的方式传入函数体。
2.一个对象以值传递的方式通过函数返回。
3.一个对象要通过另一个对象就行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值