C++ 6小时刷完面向对象
2020-12-07 02:50
标签:父类 类型转换 不同 修饰符 继承 抽象 post names static **本篇博文参考视频见我上一篇博文的第一行** - 对象的声明 ### 访问修饰符(public private proctected friend) ### 构造函数、构造函数类型 ### 初始化和赋值的区别 ### 初始化列表 ### this指针 ### 常函数 ### 静态成员 **调用** ### 宏计算 ### 运算符重载 ``` class stu{ friend stu operator+(stu& s,stu& s2); int operator++(stu& stu){ int operator++(stu& stu,int n){ int main(){ ### 类的继承 ``` ### 多态 ### 虚析构 ### 纯虚函数 ### 虚继承 }; ### 异常 ``` void fun(int i){ ### 内部类 class out{ ### static_cast class father{ **函数模板2个参数** ### 函数模板的具现化 C++ 6小时刷完面向对象 标签:父类 类型转换 不同 修饰符 继承 抽象 post names static 原文地址:https://www.cnblogs.com/littlepage/p/10989612.html
### 类和对象的声明
- 类的声明
```
class People{
int a;
void fun(){
cout }
};
```
**注意:类结束一定要加分号,否则会报void不能有返回值的错误**
```
People p;
```
没有访问修饰符,默认是private
public: 类内成员对外可见
private:类内成员对外不可见
protected:类和子类可见
friend:友元,对某函数私有变量访问开放
和Java大致相同,这里不过多叙述
初始化是产生对象后产生自带属性,空参构造中传值
赋值是一个变量可以进行赋予一个值
数据成员进行初始化
```
class stu{
public:
int a;
float f;
stu():a(12),f(12.3f){};
};
```
### 析构函数
~类名(){
}
this->成员
和Java也差不多
xxx() const{}
可以使用数据成员,不能修改数据成员
- 静态数据成员
static int a;
- 静态函数成员
static void xx(){}
- 类名::成员
- 类名::函数()
```
#define SUM(x) x*x
cout```
宏计算知识单纯的替换,也就是替换成2+3*2+3=11,输出11
#include
using namespace std;
private:
int age;
int score;
public:
stu(){
age=12;
score=12;
}
stu(int age,int score){
this->age=age;
this->score=score;
}
friend int operator>=(stu& st1,stu& st2);
friend ostream& operator friend istream& operator >> (istream& os,stu& stu);
friend int operator++(stu& stu);
friend int operator++(stu& stu,int n);
int operator=(int a){
age=a;
return a;
}
int operator[](int n){
return 0;
}
//强制类型转换
operator int(){
return age;
}
};
stu operator+(stu& s,stu& s2){
stu ss(s.age+s2.age,s.score+s2.score);
return ss;
}
int operator>=(stu& st1,stu& st2){
return st1.age-st2.age;
}
ostream& operator os return os;
}
istream& operator >> (istream& is,stu& stu){
is>>stu.age>>stu.score;
return is;
}
return ++stu.age;
}
return stu.age++;
}
stu st1,st2;
st1=st1+st2;
cout=st2) cout cout cout cout system("pause");
return 0;
}
```
重载几个操作符的写法
````
#include
using namespace std;
class people{
public:
void study(){
cout }
};
class child:public people{
public:
void gotoschool(){
cout }
};
class manwoman:public people{
public:
void gotowork(){
cout }
};
class old:public people{
public:
void gotorelax(){
cout }
};
int main(){
child ch;
ch.study();
system("pause");
}
```
简单继承
#include
using namespace std;
class people{
private:
void fun1(){
cout }
protected:
void fun2(){
cout }
public:
void fun3(){
cout }
};
class child:public people{
public:
void fun3(){
fun2();
cout }
};
int main(){
child ch;
ch.fun3();
system("pause");
}
```
权限关系
```
#include
using namespace std;
class people{
public:
people(){
cout }
};
class child:public people{
public:
child(){
cout }
};
int main(){
child ch;
system("pause");
}
```
输出people child,所以先调用父类构造,然后调用子类构造
析构函数,先释放子类,然后释放父类
```
#include
using namespace std;
class father{
public:
virtual void show(){
cout }
};
class son:public father{
public:
int aa;
void show(){
cout }
};
int main(){
//父类引用指向子类对象
father* f=new son;
f->show();
son* s=(son*)f;
s->show();
system("pause");
return 0;
}
```
### 虚函数的注意点
父类是虚函数,子类函数自动是虚函数
释放父类,也同时释放子类
```
virtual void show()=0;
```
类似Java的抽象方法
```
#include
using namespace std;
class A{
public:
int a;
};
class B:virtual public A{
public:
};
class C:virtual public A{
public:
};
class D:public B,public C{
int main(){
D d;
d.a;
system("pause");
return 0;
}
```
```
#include
using namespace std;
void fun(int a){
if(a==0) abort();
}
int main(){
fun(1);
system("pause");
return 0;
}
```
异常终止
#include
using namespace std;
while(i i++;
if(5==i){
throw i;
}
}
}
int main(){
try{
fun(3);
}catch(int a){
cout }
system("pause");
return 0;
}
```
catch表示throw的类型
```
#include
using namespace std;
public:
int a;
out(){
a=12;
}
public:
class ci{
public:
int b;
ci(){
b=13;
}
void funin(){
out ou;
cout }
};
};
```
内部类示例
```
#include
using namespace std;
public:
int a;
};
class son:public father{
public:
int b;
};
int main(){
father* f;
son* s;
f=(father*)s;//旧类型转换
f=static_cast
system("pause");
return 0;
}
```
### const_cast
```
int main(){
const father* f;
son* s;
father* p1=const_cast
system("pause");
return 0;
}
```
### 函数模板
```
#include
using namespace std;
template
void fun(T a){
cout}
int main(){
fun("post");
fun(12);
fun(13.5);
system("pause");
return 0;
}
```
template≶typenane T>
如果传进参数T,无论传入什么参数,都可以得出函数结果
```
#include
using namespace std;
template
void fun(T a,Y b){
cout cout}
int main(){
fun("post",5);
fun(12,5);
fun(13.5,"success");
system("pause");
return 0;
}
```
2个参数可以传进不同参数