C++类的基础认识

一个类就是一个用户定义类型,同时也是一个作用域

定义一个类的语法:
class class_name {
  access_specifier_1:
    member1;
  access_specifier_2:
    member2;
  ...
} object_names;

类的定义也是类的声明,故可以不同的源文件中重复出现,不会违反唯一定义的规则


访问控制标识符:控制成员对外面的可访问度
public:公有,所有用户均能访问
protected:保护,只有自己和子类能访问
private:私有,只有自己能访问

成员函数:在类中声明的函数

数据成员:在类中声明的变量
数据成员不能是本身类类型,可以是类类型的引用或指针

构造函数:提供对类对象的初始化.构造函数没有返回值,且其函数名与类名相同
构造函数可以重载
一般初始化数据成员采用构造函数初始化列表,如:
MyClass(const string &n, int a):name(n),age(n) {//...}
成员初始化的顺序:以在类中声明的顺序
建议:初始化列表中的成员顺序应与其在类声明的顺序相同为好

静态成员:如果一个变量是类的一部分,而不是各个对象的一部分,且这个变量被所有对象共享,则这种成员为一个static成员.static成员只有唯一的一份副本(它本身)

const成员函数:阻止函数修改对象的成员变量
在函数的签名后加上const
如:void GetName() const {//...};
const成员函数可以与非const成员函数形成重载
const用于构造函数是没有必要的.因为构造函数就是用于初始化对象的

this指针:每个非static成员函数都隐含一个this指针,用于指向调用该函数的对象
对于非const成员函数:this是一个指向类型的const指针(MyClass * const this)
可以使用this来修改成员信息
对于const成员函数:this是一个指向const类型对象的const指针(const MyClass * const this),不能使用this指针来修改成员信息

可变数据成员:可以在任何函数(包括const函数)中修改,这种变量声明为mutable变量
可变数据成员永远不能为const

默认构造函数:调用时无需实参的构造函数
合成的默认构造函数:只有当一个类没有定义构造函数,编译器才会自动生成一个默认构造函数
建议:类通常应定义一个默认构造函数
默认构造函数可以带有默认形参

隐式类类型转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换
如:
MyClass(const std::string&=""); //默认构造函数
MyClass mc = "my class"; //将"my class"字符串隐式转换为MyClass类型对象
使用explicit来抑制隐式转换
explicit MyClass(const std::string&="");
MyClass mc = "my class"; //error,不能隐式转换
建议:通常对于单形参的构造函数应该定义为explicit,避免隐式转换而带来错误

友元:允许特定的非成员函数访问一个类的私有成员,同时仍然阻止一般的访问,则这种函数被称为类的友元,友元的声明使用关键字friend
建议:通常,将友元声明成组地放在类定义的开始或结尾

你可能感兴趣的:(C++,c,C#,Access)