类与struct的区别
class默认是私有的,使用堆存储,可以被继承。struct是公有的,使用栈存储,不可以选择。
堆栈空间有限,对大量逻辑对象创建类好一些。
结构表示点,矩,颜色的轻量对象,成本较低
表现抽象使用类
类型为数据时,结构体较好
类成员的访问控制
private:只能在类的内部访问,继承后子类不可以访问
public:公有在类的外部可以访问(通过对象)
protected:只能在类的内部访问,但是继承后,子类也能使用
对象的构造与析构
1.构造函数(公有的)无返回值 分为有参与无参。函数名与类名一样。初始化类成员
2.析构函数 ~类名()。当类的生命周期结束时,对内存进行清理(扫尾)
3.拷贝构造函数,由一个对象去构造另外一个对象 类名(类名 &对象);使用可以(如有Student类) Student s1; Student s2(s1);构造s2。或者 Student s4 = s1;
深拷贝浅拷贝
区别:当类的数据成员没有涉及到指针时,可以使用默认情况下的浅拷贝。当涉及指针时,使用浅拷贝,出现指针悬挂(当两个对象的数据成员中指针指向同一块内存,在程序运行完毕调用析构函数释放对象1后,另一个对象2数据成员依旧指向这个内存)。
若自己未定义构造函数,析构函数,会自动有构造函数与析构函数,不可以被重载。而一旦自定义了构造函数析构函数,则将不会使用默认的构造析构函数。并且一次构造对于一个析构。
对类的成员初始化。
对象初始化列表
1.当类成员声明为const时候。因为其是一个常量,在定义时候,已经填入垃圾值,不可以通过正常构造函数来修改其中的值。此时使用对象初始化列表。
如在一个类中
const char * s
Student(const char *n, int a) : name(n);
2.类对象作为另外一个类的成员变量需要构造该对象变量的值
Circle(int x, int y, int r) m_p(x, y)
3.子类继承父类的成员变量,并且对其初始化
studen() :persen(“aa”, 22);
类的构造顺序
先构造父类成员,在构造成员,再构造对象本身。
匿名对象
如
class Test
{
}
Test(2)
定义一个匿名对象,生存周期只存在这一行。
也可以在构造函数中调用构造函数产生匿名对象
new/delete
malloc/free
上者开辟和释放空间还可以构造对象。而下者是开辟和释放空间。
C++static关键字
新特性
1.修饰成员变量->静态成员变量,在类的外部初始化,多个对象共享同一静态成员变量,父子类共享静态成员变量
2.修饰成员函数->静态成员函数,可通过类名来访问,静态成员函数只能使用静态成员变量,没有this指针。
Const
1.修饰成员变量。使用对象初始化列表进行初始化
2.修饰成员函数 void show() const 只能访问数据,不可修改,也不可以调用非const成员函数
3.修饰对象。常对象。
friend
声明友元函数友元类。友元类不可以被继承,关系不具有传递性。声明友元函数,可以通过对象引用