经过一段学习,我将对c++做一段知识的总结。
目录
前言
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计
一、c++关键字:<名称,作用>
const | 常类型 | 常类型的变量或对象的值,不可修改。 |
static | 静态类型 | 在c++中,修饰类成员数据,则该类所有对象共享这个成员数据。 |
friend | 友元 | 给类的外部提供一个访问类的私有成员的接口 |
二、类和对象:
1.类的结构:
class 类名 {
public: //共有
成员数据;
成员函数;
private: //私有
…… ;
protected://保护
…… ;
};
2.类的对象声明,引用
class person
{
string name;
int age;
void show()
{
cout<<"hello"<<endl;
}
};
person p1;//声明
p1.show();//引用类函数show()
3.类的构造函数:
构造函数是一种特殊的成员函数,用于为对象分配空间,初始化。
构造函数名字与类名相同。
可有参或无参,
没有返回值。
不需要用户调用,建立对象时自动执行。
class Person
{
public:
string name;
string sex;
Person();//构造函数,无参
Person(string,string,int );//构造函数,有参
void print();//类的成员函数
private:
int age;
};
4.析构函数
析构函数一种特殊的成员函数。
用于撤销对象时,如释放对象的内存空间等。
析构函数没有参数和返回值,也不能被重载。
当撤销对象时,编译系统会自动调用析构函数。
class Person
{
public:
string name;
string sex;
Person();//构造函数,无参
~Person();//析构函数
};
5.拷贝构造函数
拷贝构造函数是一种特殊的构造函数。
作用:在建立一个新对象时,用一个已存在的对象初始化新对象。
只有一个参数,没有返回值。
每个类必须有一个拷贝构造函数,可自定义。
class Person
{
public:
string name;
string sex;
Person(string,string,int );//构造函数,有参
Person(const Person &p);//拷贝构造函数;
};
调用形式:
类名 对象2(对象1);
类名 对象2 = 对象1;
Person p1;//创建一个对象
person p2(p1); //拷贝对象p1
person p3=p1; //拷贝对象p1
6.自引用指针this
在c++中,每一个对象都能通过this指针来访问自己的地址
当成员函数中某个变量与成员变量名字相同,则使用this关键字来表示成员变量。
友元函数没有this指针。
this关键字只能用于成员函数,不能用于被static修饰的函数(静态函数)。
class Person
{
public:
string name;
string sex;
Person(string,string,int );//构造函数,有参
void set(string name,string sex);//类的成员函数
};
void person::set(string name,string sex)
{
this->name=name;
this->sex=sex;
}
7.友元函数
友元函数既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数。
友元函数不是当前类的成员函数,但它可以访问该类的所有成员,包括私有成员、保护成员和公有成员。
一个普通函数可以是多个类的友元函数。
一个类的成员函数也可以是另一个类的友元。
整个类也可以是另一个类的友元,该友元也可以称作为友类。友类的每个成员函数都可以访问另一个类的所有成员。
class Person
{
public:
string name;
string sex;
friend void set(Person& p);//友元函数
private:
int age;
};
void set(Person& p)
{
cout << "name=" << p.age << endl;
}
三.运算符重载
关键字:operator
声明格式:
返回值类型(可以是基本的数据类型&自定义的数据类型) operator 被重载的运算符 (参数列表);
定义格式:
返回值类型(可以是基本的数据类型&自定义的数据类型) operator 被重载的运算符 (参数列表)
{
//函数体
}
#include<iostream>
using namespace std;
class Complex {
public :
int a;
int b;
Complex(int a, int b)
{
this->a = a;
this->b = b;
}
};
Complex operator+(Complex& p,Complex &q)
{
Complex data3(0,0);
data3.a = p.a + q.a;
data3.b = p.b + q.b;
return data3;
}
四.继承与多态
继承:
新类可以从一个或多个已有类中,继承成员函数和数据成员,而且可以重新定义或加进新的数据和函数。已有类称为基类或父类,新建的类称为派生类或子类。
关键字:public
继承权限:public,private,protected
#pragma once
#include<iostream>
using namespace std;
class Animal
{
public :
inline Animal()
{
cout << "Animal" << endl;
}
};
class Dog :public Animal//继承Animal
{
public:
inline Dog()
{
cout << "Dog" << endl;
}
};
多态
多态: 多种形态(多种方法),“一种接口,多种方法”,一种接口,指的是父类接口,多种方法表示父类中有方法并且子类中也有相同的方法(方法相同,实现的内容不同)构成多态性