struct 和 class
和c#里不一样,默认public ,相当于 c#public类型的class,c#里struct是值类型
class则默认private
源文件中的函数调用
Point::getX() 代表作用域 Point下的成员函数getX();不同源文件中的类中调用其他类的函数时添加#include<对应的.h>就好了
{
}
构造函数
类名(){}
没有返回值,但是可以有参数,可以重载,程序会在调用类的对象创建时候自动调用,且只会调用一次
析构函数
~类名(){}
没有返回值,不可以有参数,不可以重载,程序会在调用类的对象销毁时候自动调用,且只会调用一次
无参构造函数使用时不要加括号,否则会被当成函数声明,Person p1;//无参调用构造
初始化列表初始化属性
class Person{
Person ():a(10),b(20)
int a;
int b
}
class Person{
Person (int a1,int b1):a(a1),b(b1)
int a;
int b
}
this的使用
this-> 和c#里this.的意义一致
友元
就是c#里全局变量的意思
需要在头文件.h中的这个类的第一行写需要另一个类的友元类或者函数声明,来调用声明位置这个类的私有变量(private属性)
声明示例:
class 需要访问私有属性的类
{
friend 另一个类或者函数;//第一行
}
加号运算符重载
class Person
{
public:
Person operator+(Person &p)
{
里面写重载的内容
}}
继承
- 公共继承:可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
class 子类:public 父类 子类也称为派生类,父类也称为基类
{} - 保护继承 protected 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
- 私有继承 pricate 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 私有继承之后,子类里的所有变量保护级别都变成private级别,子类的子类访问不到内部的全部内容
父类中私有内容,子类访问不到
继承中的构造和析构的顺序如下:
先构造父类,再构造子类,先析构子类,后析构父类
函数模板
语法:
template
函数声明或定义
类似参数变为泛型的函数,但是调用类作为t的类型时候需要具体化
例子:
template
void myswap(T&a,T&b)
{
T temp=a ;
a=b;
b=temp;
}
具体化:
template<>void myswap(Person &a,Person &b)
{
a.name=b.name ;
}
类模板 类模板只能显示指定类型,没法自动类型推导
class Person
{
public:
Person(Name name,Age age)
{
this->m_name=name;
this->m_age=age;
}
Name m_name;
Age m_age;
};
//调用
Person<string,int> p1("孙悟空",999)
vector 容器
vector
v.push_back(10);"插入数据10"
如果是往两头加数据,用deque更快
stack 容器
先进后出, 不能遍历 .size返回元素个数,判断空empty