C++的基础知识
头文件
一个类可以放在一个.cpp.h文件中
成员变量
- 本地变量(local variable):作用域只在函数运行时
- 成员变量(Fields):作用域-类中
- 成员变量名=本地变量名时,根据就近原则,成员变量被屏蔽掉
- 成员变量不在类中而是在类的对象里面 看注释
#include <iostream>
using namespace std;
class A
{
private:
int i; //声明i
public:
void f();
};
void A::f()
{
i=10;
}
int main()
{
A a; //定义i
a.f();
return 0;
}
成员变量秘密
- 声明和定义 --是否告知where
- i属于对象
- 函数属于类
- this指针的存在
构造析构
- 构造无返回类型,可传参
- 析构无返回类型,无传参
#include <iostream>
using namespace std;
class A
{
private:
int i;
public:
void f();
A(); //构造
~A(); //析构
};
void A::f()
{
i=10;
cout <<"i="<<i <<endl;
}
A::A()
{
i=0;
cout<<"构造执行"<<endl;
}
A::~A()
{
cout<<"析构执行"<<endl;
}
int main()
{
A a;
a.f();
return 0;
}
对象初始化
- default construction :没有参数
- new: 分配空间,调用构造//返回地址
- delete +地址:调用析构
- new int[] delete [] p //不只有一个对象
- new 动态申请数组
访问属性
- public:公开
- private:私有
- protected :子孙和自己
- friend:友元 //你申明别人是你的友元
初始化列表
- A():p(0){}
- A(int i):p(i){}
A(int i):p(i){}
A(int i):{p=i}的区别
1.初始化
2.赋值
对象组合
- 对象组合(外)
- 父类(内)
继承
重载默认参数
- 返回类型不能构成重载
- 尽量使用已有的代码进行重载
- 子类构造会自动调用父类构造函数
- 用子类去调用父类构造
- 字父类间有名字相同的函数
- 发生名字隐藏,父类函数及重载被隐藏
缺省参数
- default argument:拒绝使用
- where:.h
内联函数
- what :inline
- where :.h //声明
- example:成员函数,声明的时候写函数体可以内联、或者直接放在后面
const
- 本质:变量
- Pointer:char *const p 指针本身是const
- p不能修改,p的内容可以修改
- const char *p 指向const char 类型
- *前面对象const,后面星号是const
- int date()const{}函数const this是const
- 成员变量const 初始化列表初始化
引用
- reference:char &r=c 定义的时候初始化,别名
- 为了让代码少一点*
向上造型
- 子类当做父类看
多态
- virtual 虚函数 子类和父类同名函数有联系
- 通过指针引用调用时,不能确定是什么类型,运行的时候才能确定
- void render(shape*P)
- upcast dynamic binding(virtual)
多态实现
- 类首有一个指向vtable的指针
- 析构多态virtual
- overriding
引用2
- 传大的参数:使用const int&
- 函数返回类型有const
拷贝构造
-
对象传参:复制参数没有执行构造
-
定义的时候classname a=b 发生拷贝构造
-
T::T(const &T)
-
成员是指针时会发生指针拷贝
-
happen:调用函数() 返回对象
-
default construction 、、 virtual 、、copy
静态对象
-
static where、who see
-
构造只发生一次
-
静态成员 A::a
-
静态函数 A::fun 不能访问非静态成员变量