- 一、C++中的类
- 1.public和private
- 2.构造函数
- 2.1默认构造函数和自定义构造函数
- 2.2拷贝构造函数
- 2.3赋值构造函数
- 3.析构函数
- 4.类中的static
- 5.类中的const
- 6.组合和聚合
- 6.1组合(Compostion)
- 6.2聚合(Aggregation)
- 二、python中的类
- 1.访问权限
- 2.类属性,实例属性,类方法,实例方法,构造函数,析构函数,静态方法
一、C++中的类
1.public和private
如果不区分的话,默认是private
#includeclass STU{ public: int age; const char gender; void get_age() const; private: int money; }
2.构造函数 2.1默认构造函数和自定义构造函数
如果无自定义的构造函数,编译器会创建默认构造函数
//自定义构造函数
STU::STU(int age){
this->age = age;
}
2.2拷贝构造函数
STU::STU(const STU& s){
this->age = s.age;
}
拷贝构造函数定义时需要考虑深拷贝和浅拷贝问题。
拷贝构造函数调用的时机:
- 使用如下形式创建对象时STU s1; STU s2(s1);
- 将对象(而非对象指针)传递给函数的形参时;
- 函数返回一个对象(而非对象指针)的时候。
赋值构造函数实际使用运算符重载来实现,在对象赋值时被调用
STU& STU::operator=(const STU& s){
this->age = s.age;
return *this;
}
3.析构函数
在对象销毁前被调用
STU::~STU(){
cout << "I am going to die" < endl;
}
4.类中的static
- static修饰成员变量和成员函数的时候都表示当前的成员属于整个类,而非某个对象;
- const修饰某成员函数时,在该函数内不能对对象的成员变量进行修改如下
stu::get_age() const{
cout << this->age << endl;
}
- const修饰成员变量的时候需要进行初始化,在c++11中可以直接在声明类的时候初始化const对象,更推荐使用初始化列表如下:
STU::STU(int age):gender('m'){
this->age = age;
}
- const 修饰某个对象时,为了确保安全,该对象只能调用被const修饰的成员函数。
在对象内部又创建了其他对象称为Compostion,这些对象生命周期为同生共死。
所有的对象都已经创建出来,某一个对象内部存在其他对象的指针,称为Aggregation,他们的生命周期互不影响。
python中没有private和public关键字,python类的私有成员命名以双下划线开头
class Human:
#类属性
gender = "m"
# 构造函数
def __init__(self, name, age):
#实例属性
self.name = name
self.age = age
# 类方法
@calssmethod
def eat(cls):
print("I am eating")
# 实例方法
def run(self):
print("I am running")
#析构函数
def __del__(self):
print("I am going to die")
#静态方法,既不属于类,也不属于函数,调用的时候直接用类名调用
@staticmethod
def unknown():
print("Nothing to do")



