类和对象

简介: 类和对象

1.封装 的意义


#include<iostream>
using namespace std;
const double PI = 3.14159;
class Circle {
public:
  int m_r;
    double cacl() {
      return PI*m_r *m_r;
    }
};
int main() {
  Circle one;
  one.m_r = 12;
  cout << one.cacl() << endl;
  system("pause");
  return 0;
}

设置类的参数:

#include<iostream>
using namespace std;
class student {
public:
 void setname(string name) {
  m_name = name;
 };
 void setaage(int age) {
  m_age = age;
 };
 void setaddress(string address) {
  m_address = address;
 };
 void print() {
  cout << "name is" << m_name << "  age is  " << m_age << "  address is  " << m_address << endl;
 }
public:
 string m_name;
 int m_age;
 string m_address;
};
int main() {
 student stu;
 stu.setname("laozhichi");
 stu.setaage(18);
 stu.setaddress("leizhou");
 stu.print();
 system("pause");
 return 0;
}


封装意义2

类在设计时,可以把属性和行为放在不同的权限下,加以控制  

访问权限有三种:

  1. public 公共权限
  2. protected 保护权限
  3. private 私有权限





2.class和struct的区别


在C++中STRUCT和CLASS唯一的区别就在于默认的访问权限不同

区别:

STRUCT默认权限为公共

默认权限为私有

CLASS



{
int m_A; //默认是私有权限
};
struct C2
{
int m_A; //默认是公共权限
};
int main() {
C1 c1;
c1.m_A = 10; //错误,访问权限是私有
C2 c2;
c2.m_A = 10; //正确,访问权限是公共
system("pause");
return 0;
}

3. 成员属性设置为私有  

通过设置函数访问其中的private等属性

class Person {
public:
//姓名设置可读可写
void setName(string name) {
    m_Name = name;
}
string getName()
{
    return m_Name;
}
//获取年龄
int getAge() {
    return m_Age;
}
//设置年龄
void setAge(int age) {
    if (age < 0 || age > 150) {
        cout << "你个老妖精!" << endl;
        return;
    }
    m_Age = age;
}
//情人设置为只写
void setLover(string lover) {
    m_Lover = lover;
}
private:
string m_Name; //可读可写 姓名
int m_Age; //只读 年龄
string m_Lover; //只写 情人
};
int main() {
    Person p;
    //姓名设置
    p.setName("张三");
    cout << "姓名: " << p.getName() << endl;
    //年龄设置
    p.setAge(50);
    cout << "年龄: " << p.getAge() << endl;
    //情人设置
    p.setLover("苍井");
    //cout << "情人: " << p.m_Lover << endl; //只写属性,不可以读取
    system("pause");
    return 0;
}


4.构造函数与析构函数

构造函数语法: 类名(){}

  1. 构造函数,没有返回值也不写void
  2. 函数名称与类名相同
  3. 构造函数可以有参数,因此可以发生重载
  4. 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次

析构函数语法: ~类名(){}

  1. 析构函数,没有返回值也不写void
  2. 函数名称与类名相同,在名称前加上符号 ~
  3. 析构函数不可以有参数,因此不可以发生重载
  4. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
#include<iostream>
using namespace std;
class person {
    public:person() {
    cout << "你是对的" << endl;
}
    ~person() {
          cout << "你是错的" << endl;
      }
};
void func() {
    person p;
}
int main() {
    func();
    system("pause");
    return 0;
}


5. 构造函数的分类及调用




//1、构造函数分类
// 按照参数分类分为 有参和无参构造 无参又称为默认构造函数
// 按照类型分类分为 普通构造和拷贝构造
class Person {
public:
//无参(默认)构造函数
Person() {
cout << "无参构造函数!" << endl;
}
//有参构造函数
Person(int a) {
age = a;
cout << "有参构造函数!" << endl;
}
//拷贝构造函数
Person(const Person& p) {
age = p.age;
cout << "拷贝构造函数!" << endl;
}
//析构函数
~Person() {
cout << "析构函数!" << endl;
}
public:
int age;
};
//2、构造函数的调用
//调用无参构造函数
void test01() {
Person p; //调用无参构造函数
}
//调用有参的构造函数
void test02() {
//2.1 括号法,常用
Person p1(10);
//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
4.2.3 拷贝构造函数调用时机
C++中拷贝构造函数调用时机通常有三种情况
        使用一个已经创建完毕的对象来初始化一个新对象
        值传递的方式给函数参数传值
        以值方式返回局部对象
        示例:
//Person p2();
//2.2 显式法
Person p2 = Person(10);
Person p3 = Person(p2);
//Person(10)单独写就是匿名对象 当前行结束之后,马上析构
//2.3 隐式转换法
Person p4 = 10; // Person p4 = Person(10);
Person p5 = p4; // Person p5 = Person(p4);
//注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明
//Person p5(p4);
}
int main() {
test01();
//test02();
system("pause");
return 0;
}


6.初始化列表




class Person {
public:
////传统方式初始化
//Person(int a, int b, int c) {
// m_A = a;
// m_B = b;
// m_C = c;
//}
//初始化列表方式初始化
Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}
void PrintPerson() {
cout << "mA:" << m_A << endl;
cout << "mB:" << m_B << endl;
cout << "mC:" << m_C << endl;
}
private:
int m_A;
int m_B;
int m_C;
};
int main() {
Person p(1, 2, 3);
p.PrintPerson();
system("pause");
return 0;
}



相关文章
|
存储 编译器 C语言
【C++】类和对象(上)
【C++】类和对象(上)
77 0
|
编译器 C++
【C++】类和对象(二)
类和对象(二) 类中有六个默认成员函数: 编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
59 0
|
存储 安全 编译器
C++类和对象【中】
C++类和对象【中】
42 0
|
4月前
|
存储 编译器 C语言
类和对象【下】
类和对象【下】
|
7月前
|
Java 编译器 C语言
|
7月前
|
Java
类和对象二
类和对象二
34 1
|
7月前
|
编译器 C++
【c++】类和对象2
【c++】类和对象2
42 1
|
7月前
|
存储 编译器 C语言
【C++】:类和对象(1)
【C++】:类和对象(1)
60 0
|
7月前
|
Java 编译器 C语言
C嘎嘎之类和对象下
C嘎嘎之类和对象下
63 0
|
编译器 C++
类和对象(下)
类和对象(下)
47 0