C++类
一:类的简介:
C++的类是一种用户定义的数据类型,用于封装数据和方法。它是面向对象编程的基本概念,允许程序员将数据和操作数据的方法组合在一起。类可以包含成员变量和成员函数,用于描述对象的属性和行为。通过类的实例化,可以创建对象并使用对象的方法操作数据。类是C++中面向对象编程的基础,能够提高代码的可重用性和可维护性。
从功能上来看,类有点类似于结构体,但是它们有一定的区别,主要表现为:
1.默认的不同:
c++中结构体默认为类的public属性,即允许外部使用,而类在不声明时,默认为private属性,即仅内部可用。
2.功能的不同:
类可以有访问控制修饰符,如public、private和protected,而结构体不支持。
二:类的定义:
class p {//类名
public:
?
private:
};
-
public:public成员在类的外部可以被访问。这意味着任何对象都可以访问public成员变量和成员函数。在类的外部,可以直接使用对象名和成员名来访问public成员。
-
private:private成员只能在类的内部访问,外部的代码不能直接访问private成员。只有类的成员函数可以访问private成员。这样可以保护数据,只允许类的内部进行操作,避免外部代码对类的数据进行不当的修改。
三:类的初始化:
3.1.在C++11及更高版本,可以在定义时直接对public成员进行初始化:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?int name;
? ?int age;
private:
? ?
};
int main() {
? ?p person1 = { 1,2 };
? ?cout << person1.age;
? ?return 0;
}
注意:
1.系统会按照顺序对public成员进行赋值,{}内部数字不能超过public的成员数目,但是可以少于,少于自动补0。
2.外部无法访问到private,所以,该操作仅仅对public成员有效。
3.2:利用'.'直接访问成员或成员函数进行初始化:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?int name;
? ?int age;
? ?void setscore(int x) {
? ? ? ?score = x;
? }
?
private:
? ?int score;
};
int main() {
? ?p person1;
? ?person1.name = 1;
? ?person1.age = 18;
? ?person1.setscore(100);
? ?cout << person1.age;
? ?return 0;
}
利用这种方法进行初始化较1更加方便,且可以通过这种方法对private成员进行赋值。同理,也可以用这种方法输出private中成员的值:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?int name;
? ?int age;
? ?void setscore(int x) {
? ? ? ?score = x;
? }
? ?int getscore(void){
? ? ? ?return score;
? }
private:
? ?int score;
};
int main() {
? ?p person1;
? ?person1.name = 1;
? ?person1.age = 18;
? ?person1.setscore(100);
? ?cout << person1.getscore();
? ?return 0;
}
3.3:利用类的构造函数进行初始化:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?p(string name, int age) :name_(name), age_(age) {
? ? ? ?cout << name_ << age_;
? }
private:
? ?int score;
? ?int age_;
? ?string name_;
};
int main() {
? ?p person1("shelly", 18);
? ?return 0;
}
当然也可以这样写:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?p(string name, int age){
? ? ? ?name_ = name;
? ? ? ?age_ = age;
? ? ? ?cout << name_ << age_;
? }
private:
? ?int score;
? ?int age_;
? ?string name_;
};
int main() {
? ?p person1("shelly", 18);
? ?return 0;
}
还可以这样:
#include <iostream>
#include <string>
using namespace std;
class p {
public:
? ?p(string name, int age){
? ? ? ?name_ = name;
? ? ? ?age_ = age;
? ? ? ?cout << name_ << age_;
? }
private:
? ?int score;
? ?int age_;
? ?string name_;
};
int main() {
? ?p person1 = { "xlx",18 };
? ?return 0;
}
注意:
1.该构造函数应该在类的public部分,才能被外部使用。
2.构造函数是没有类型的。
3.构造函数的名称与类名称相同。
4.构造函数与函数一样,不能像第1种方法一样,少于参数的数量,否则会报错。且存在构造函数时,用{}进行初始化,默认是使用构造函数,而不是方法1。