声明类
在C++中想要声明一个类,可以使用class关键字,并在它后面依次包含类名,一组存放在{}内的成员属性和方法以及结尾的分号
class Person
{
string name;
int age;
};
实例化对象
使用类名+类变量
Person jack;
使用new实例化类
Person jack = new Person(); delete jack;
访问类成员
使用点号(.)访问类成员
Person jack; jack.name = "black jack";
使用指针(->)运算符访问类成员
Person jack = new Person(); jack->name = "black jack";
public和private关键字
- c++提供了public和private关键字里指定哪些部分可从外部访问,哪些部分不能.
class Person { private: int age; string name; public: int getAge() { return age; } void setAge(int age) { if (age <= 0) age = age; } }
构造函数
构造函数是一种特殊的函数(方法),在创建对象是被调用.它与类名同名且不返回任何值.与函数一样构造函数也可以被重载
声明构造函数
class Person { public: Person(); }
构造函数可以在类声明中实现,也可以在类声明外实现.
class Person
{
Person()
{
// statement
}
};
class Person
{
public:
Person();
};
Person::Person()
{
// statement;
}
带有默认值的构造函数
class Person { private: string Name; int age; public: Person(string personName, int age = 12) { Name = personName; age = age; } }
包含初始化列表的构造函数
class Person { private: string Name; int age; public: Person(string personName, int age) :Name(personName),age(age) { // statement } }
析构函数
与构造函数一样,析构函数也是一种特殊的函数.与构造函数不同的是,析构函数在对象销毁时自动被调用.
声明和实现析构函数 与构造函数一样,析构函数也看起来像一个与类同名的函数,但是前面有一个波浪号
~
class Person { ~Person(); }
何时使用析构函数 每当对象不再在作用域或通过delete被删除,进而被销毁时,都将调用析构函数.
this指针
在类中,关键字this包含当前对象的地址,换句话说,其值为&object.当你在类成员方法中调用其他成员方法时,编译器将隐式地传递this指针
Note:
- 调用静态方法时,不会隐式地传递this指针,因为静态函数不与类实例相关联,而由所有实例共享.
- 如果要在静态函数中使用实例变量,应显式地声明一个形参,让调用者将实例设置为this指针.
将sizeof用于类
sizeof运算符也可以用于类中,在这种情况下,它将指出类声明中所有数据属性占用的总内存量.
声明元友类
- 不能从外部访问类的私有数据成员和方法,但这条规则不适用于友元类和友元函数.
- 要声明友元类或友元函数,可以使用关键字friend
友元函数例子:
#include<iostream>
#include<stirng>
using namespace std;
class Human
{
private:
string Name;
int Age;
friend void DisplayAge(const Human& Person);
public:
Human(string firstName, int age)
{
Name = firstName;
Age = age;
}
};
void DisplayAge(const Human& Person)
{
cout << Person.Age << endl;
}
int main()
{
Human Man("jack", 12);
cout << DisplayAge(Man) << endl;
return 0;
}
友元类例子:
#include<iostream>
#include<string>
using namespace std;
class Human
{
public:
string Name;
int Age;
friend class Utils;
private:
Human(string firstName, int age)
{
Name = firstName;
Age = age;
}
};
class Utils
{
public:
static void DisplayAge(const Human& Person)
{
cout << Person.Age << endl;
}
};
int main() {
Human Man("jack", 22);
cout << Utils::DisplayAge(Man) << endl;
return 0;
}
Note: 友元类和友元函数,我们是朋友我的东西可以借给你
that's all