c++学习笔记02
来源:互联网 发布:淘宝评价默认排序规则 编辑:程序博客网 时间:2024/06/03 20:57
类的继承:基类、派生类 或者 父类、子类
继承的方式:
public(都可以访问),
private(只能在自己类内部中被访问),
protected(只能在子类和自己类中被访问)
在父类中作为protected属性的成员函数,子类可以继承protected属性的成员函数,但在外部不能被访问。
父类、子类构造函数先后调用顺序:先构造父类的对象再构造子类的对象
父类、子类析构函数先后调用顺序:先子类再父类
函数的覆盖发生在父类和子类之间,而函数的重载发生在一个类之间
多态性:
早期绑定:在编译时已经确定了需要调用哪一个函数
迟绑定:在运行的时候根据对象类型确认调用哪一个函数(父类成员函数前面加上virtual)
virtual总结:子类有的调用子类的,子类没有的调用父类的
纯虚函数:没有函数体的虚函数。(指被标明为不被具体实现的虚成员函数,可以让类先具有操作的名称而没有具体的操作内容,子类在继承的时候再根据需要具体去给出定义)
含有纯虚函数的类被称为抽象类 (只能作为基类,为派生类服务,不能直接实例化一个对象)。
#include <iostream>
class Animal
{
public:
/*
Animal()//不带参数
{
cout << "Animal construct" << endl;
}
*/
Animal(int length,int wight)//带参数
{
cout << "Animal construct" << endl;
}
~Animal()
{
cout << "Animal deconstruct" << endl;
}
void eat()
{
cout << "animal eat" << endl;
}
void sleep()
{
cout << "animal sleep" << endl;
}
/*
void breathe()
{
cout << "animal breathe" << endl;
}
*/
/*
virtual void breathe() //虚函数
{
cout << "animal breathe" << endl;
}
*/
virtual void breathe() = 0;//纯虚函数
}
class fish : public Animal
{
public:
fish():Animal(10,20),a(1);11//1在子类当中向父类中带参数的构造函数传递参数的一种方式
{
cout << "fish construct" << endl;
}
~fish()
{
cout << "fish deconstruct" << endl;
}
void breathe()//覆盖父类的breathe
{
cout << "fish breathe" << endl;
}
void breathe()//覆盖父类的breathe
{
//Animal::breathe();
cout << "fish breathe" << endl;
}
private:
const int a;//z常量数据成员必须初始化采用1
}
void fun(Animal* pAn)
{
pAn->breathe();
}
int main()
{
fish fs;
Animal *pAn;
pAn = &fs;
fun(pAn);//打印animal breathe
//当父类breathe()函数加上了virtual 打印 fish breathe
}
引用:一个变量的别名,指向同一块内存;
必须在在定义时初始化,一个引用为一个变量服务,一个变量可以有多个引用;
主要用在函数传参相当于地址传递
引用和指针变量的区别:
引用不需要占用内存, 指针变量本身需要内存空间去存放他本身;
类设计风格:
把类的定义和函数原型的声明放到.h头文件
把类当中成员函数的实现放到.cpp源文件中
作用域标示符 ::
::是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(left-associativity)
他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a,如果想调用class A中的成员变量a,那么就写成A::a,另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespace
std;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout)
条件预编译指令符:防止重复定义
#ifndef XXX_H
#define XXX_H
#endif
文件编译过程中,每一个源文件都单独编译而不是交叉编译。
阅读全文
0 0
- C语言学习笔记02
- C基础学习笔记02
- C++/C学习笔记
- 《C Primer Plus》学习笔记02
- Programming in Objective-C 学习笔记02
- 【C/C++】STL学习笔记
- C/C学习笔记/导言
- C/C学习笔记/结构
- 【c/c++】学习笔记1
- C学习笔记1
- TPC-C学习笔记
- c语言学习笔记
- C语言学习笔记
- C语言学习笔记
- 学习笔记之c
- C#-学习笔记
- Objective-C学习笔记
- C++PRIMER学习笔记
- 数组中出现次数第k多的数字(求次数前k多的问题)
- TCP/IP初探
- 51Nod
- JAVA装饰者模式
- PAT (Advanced Level) Practise 1131 Subway Map (30)
- c++学习笔记02
- [Easyui TreeGrid]多行选中可编辑,再次单击退出编辑状态
- JavaScript中的事件
- 17 东北赛总结
- 使用Visual C++进行串口通信编程
- 四种XML解析方式比较
- 部署Tomcat与Nginx负载均衡
- maiadb
- UE4中程序驱动的LookAt动画