注:本文根据个人理解,系统梳理了C++知识,主要搭建了框架,却不够完善,日后在学习过程中会进一步完善文章,阅读可能需要一定C++基础,对于大家C++的系统理解应该能有所帮助,文章有许多不当之处,望指正,不胜感激
类与对象关系
1.类是抽象的,对象是从类中抽象出来的
比如:
一个类叫形状(抽象)
对象就有圆形,矩形...
类中有=数据+操作
类抽象出对象,类是虚的,对象是实体
class Circle{
//数据
private:
int r;//成员数据
public:
//成员函数(操作)
void Setr(int s);//改变半径
void Getr();//得到半径
};
//类抽象出对象的操作
Circle a;//对象a
//对象a使用成员函数/数据的操作
a.Setr(10);
//可以这样拆解:
//1.调用函数Setr(10);
//2.调用谁的函数a.Setr(10);
a.Getr();
数据,操作在类/对象中的位置关系:
成员函数在类中,
成员数据在每个对象中
成员数据
1.const成员
特殊声明方式:只能用初始化列表初始化
2.static成员
A类中:static int i;
类外定义:如:int A::i = 0;
3.引用类型
一个数据的别名(小名)
成员函数(函数)
1.新增构造函数,析构函数(以A类为例)
析构函数:~A();
构造函数:
普通构造函数:A();
A(int i);
拷贝构造函数:A(const A&);
//声明的同时赋值用拷贝构造
//如:A b(a);
//否则调用拷贝复制运算符 A& operator=(const A &);
//如:A b;
// b = a;
对于构造函数:
初始化列表
Circle(int i) :r(i) { }
//不允许写了初始化列表却未定义(未写函数体)的行为
--引用,const成员,类
需要用初始化列表定义
2.函数重载
同一个函数名,不同的参数列表,
函数调用依据参数个数
来选择调用哪个函数(返回值不同不能进行重载)
如:int f();
int f(int i);
int f(double i);
int f(int i,double i);
但是
int f(int i)
double f(int i)
不算是函数重载
3.运算符重载
重新定义运算符的运算,进行对象与对象间的运算(本质含义不变)
//此处讲的省略,可以专门搜索详细的博客,
//主要目的是为了基于个人理解梳理知识脉络,望多多包涵
主要分为成员函数和非成员函数
两种情况的return 值和传入形参个数不相同
4.默认形参
用于调用函数时少传入参数时,提前为函数形参指定初始值
只能在声明中指定一次,而不是在定义中
声明函数:
void f(int i=0);
定义函数:
void f(int i)
{
cout<<i<<endl;
}
若为调用函数时为
f() 输出结果 0
f(8) 输出结果 8
//仍需进一步完善...
5.函数模板
6.虚函数
7.多态
类新增知识
1.作用域解析符: ::
用于区分类于类之间
如:
class A {
void f();
};
class B{
void f();
};
//定义时
void A::f() //A的f()
{
cout<<"A::f()"<<endl;
}
void B::f()//B的f()
{
cout<<"b::f()"<<endl;
}
那么:
std::cout
既是类std下的cout成员
2.namespace
如果只想用cout
则需要加上
using namespace std;
否则需要
std::cout
std::endl
3.访问限定符:
public:类中,类外均可使用
protected:类和派生类可使用
private:仅类中可用
类与类之间关系
1.友元(朋友关系)
声明友元即可以代表可以随意访问私有成员
class A{
private:
static int i;
public:
friend void f();//告诉A类f()是自己的朋友,可以访问A的私有数据
};
int A::i = 0;
//全局函数
void f()
{
cout<<i<<endl;
}
2.组合
将同一类事物组合在一起
如:两个点可以组合成一条线
class Point{
private:
int x,y;
public:
Point(int i,int j) :x(i),y(j) { }
};
class Line{
private:
Point p1;
Point p2;
public:
Line(int x1,int y1,int x2,int y2) :p1(x1,y1),p2(x2,y2) { }
};
三个线可以组合成一个三角形
class Triangle{
private:
Line l1;
Line l2;
Line l3;
public:
Triangle(int x1,int y1,int x2,int y2,int x3,int y3)
:Line(x1,y1,x1,y2),Line(x2,y2,x3,y3),Line(x3,y3,x1,y1) { }
};
//仍需进一步完善...
3.继承 (父子关系)
从自己的基础上派生出新的做法,减少代码重写
C++基础区别于C
头文件
C++ | C |
---|---|
(1)输入输出流 | |
iostream | stdio.h |
cout | scanf |
cin | printf |
(2)动态分配 | |
new | malloc |
delete | free |
(3)数组 | |
vector(容器) | [] |
(4)字符串 | |
string | char |
本文仍需完善…