C++程序设计入门(上) 之对象和类

面向对象编程:

如何定义对象?  同类型对象用一 个通用的类来定义

class C { int p; int f(); }; C ca, cb; 

一个类用变量来定义数据域,用函数定义行为。

class Cirle
{
    public:
        double r;
    Cirle()
    {
        r = 1;
    }
    Cirle(double newr){
        r = newr;
    }
    double get()
    {
        return r * r *3.14;
    }
}; 

构造函数:

类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类)

Constructors:

? Initialize objects (构造函数:初始化对象)

? Has the same name as the defining class (与类同名)

? NO return value (including "void"); (无返回值)

? constructors can be overloaded (可重载)

? may be no arguments (可不带参数)

类可不声明构造函数,编译器会提供一个带有空函数体的无参构造函数。

用类创建对象:

ClassName objectName; eg:Circle circle1;

ClassName objectName(arguments); eg:Circle circle2(5.5);

对象访问运算符(.):

objectName.dataField // 访问对象的数据域

objectName.function(arguments) // 调用 对象的一个函数

eg:circle1.radius = 10;

int area = circle1.getArea();

类似于结构体的使用方法。但当问数据域的时候,类的数据域必须是共有属性。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
class Cirle
{
    public:
        double r;
    Cirle()
    {
        r = 1;
    }
    Cirle(double newr){
        r = newr;
    }
    double get()
    {
        return r * r *3.14;
    }
};
int main()
{
    Cirle a;
    Cirle b(2.0);
    cout << a.get() << endl;
    cout << b.get() << endl;
    return 0;
} 

对象指针与动态对象:

Circle circle1;
 Circle *pCircle = &circle1;
cout << "The radius is " << (*pCircle).radius << endl;
cout << "The area is " << (*pCircle).getArea() << endl;

(*pCircle).radius = 5.5;
cout << "The radius is " << pCircle->radius << endl;
 cout << "The area is " << pCircle->getArea() << endl;

在堆中创建对象:

在函数中声明的对象都 在栈上创建,函数返回, 则对象被销毁。

为保留对象,你可以用new运算符在堆上创建它。

ClassName *pObject = new ClassName(); //用无参构造函数创建对象
ClassName *pObject = new ClassName(arguments); //用有参构造函数创建对象

Circle *pCircle1 = new Circle(); //用无参构造函数创建对象
Circle *pCircle2 = new Circle(5.9); //用有参构造函数创建对象

//程序结束时,动态对象会被销毁,或者
delete pObject; //用delete显式销毁

数据域封装:

数据域采用public的形式有2个问题

1.数据会被类外 的方法篡改

2.使得类难 于维护,易出现bug

原文地址:https://www.cnblogs.com/wjc2021/p/10673832.html

时间: 2024-10-11 03:41:34

C++程序设计入门(上) 之对象和类的相关文章

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序

网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库_第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ compiler, or you need filename with '.cpp' suffix #endif #include "ege.h" using namespace ege; #endif #inc

C/C++知识要点6——定义只能在堆/栈上生成对象的类

在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A: 区别: 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象.使用这种方法,直接调用类的构造函数. 动态建立类对象,是使用new运算符将对象建立在堆空间中.这个过程分为两步,第一步是执行operator new()函数,在堆空间中搜索合适的内存并进行分配:第二步是调用构造函数构造对象,初始化这片内存空

定义一个只能在栈上构造对象的类

只能在堆上定义的对象可以通过声明构造函数是私有的,然后提供两个静态的方法,一个方法用来获取堆上的对象,一个用来释放堆上的对象.C++中定义一个不能被继承的类中第二种方法就是通过这种方式声明了一个不能被继承的类,但是这个类的对象就只能位于堆中了. 那么如何一定一个只能在栈上构造的对象? 这个就涉及到了C++中new这个操作符,它包含两步: 调用一个全局的operator new函数分配一定的内存空间 调用对象的构造函数 如果不允许一个类在堆上分配内存,但是允许其在栈上分配内存,对比这两种方式可以发

网易云课堂_C++程序设计入门(上)_第4单元:物以类聚 – 对象和类_

第1节:类的概念 Features of OO ( 面向对象的特征) Abstraction ( 抽象) Polymorphism ( 多态) Inheritance ( 继承) Encapsulation ( 封装) A PIE 第2节:创建对象并访问对象成员 第3节:关于创建对象的更多细节 第4节:将声明与实现分离 第5节:对象指针与动态对象 第6节:C++字符串类 第7节:数据域封装 第8节:变量作用域与this指针 第9节:对象作为函数参数 第10节:对象数组 第11节:类抽象与封装 第

网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容

第1节:不可变对象.不可变类:避免多次声明 4. Variable names must be in mixed case starting with lower case. 4. 变量名必须混合大小写且以小写字母开头 例如:line, savingsAccount How to make a class immutable? ( 让类成为“不可变类”) Mark all data fields private (所有数据域 均设置为“私有”属性) 全是我的! No mutator functi

网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态

第01节:继承 回顾 面向对象的4个特点: A(抽象) P(多态)I(继承)E(封装) 前两个单元:AE 本单元: PI 第02节:构造函数和析构函数 派生类继承的成员 派生类继承 ctor 和 dtor 吗? 派生类不继承的特殊函数 构造函数 (C++11已允许继承) 析构函数 作为特权地位的友元函数 赋值运算符函数 #include <iostream> struct A { A(int i) { } A(double d, int i) { } // ... }; struct B :

网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)

第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回 提交作业(截止时间已过) 完成并提交作业 作业批改 互评训练 互评作业 自评作业 成绩公布 查看成绩 温馨提示:本次作业的提交截止时间已过,无法成功提交作业.你可以在输入框中输入答案作为练习,但是所有答案都不会计入最后成绩. 请你练习编写一个C++程序,体会C++程序与C程序的不同之处.由于本作业需要同学们互评,因此作业提交时间期限很短,在题目发布后一周内就必须提交完成.超时的同学将无本次测验成绩,不参加互评会导致成绩被扣分.

网易云课堂_C++程序设计入门(上)_第3单元:更上一层楼 – 超越C的语法_第3单元作业【2】-在线编程(难度:易;10分)

1 编程序,学习使用类型转换运算符 static_cast(10分) 题目难度:易   题目内容: 编程序,读入两个数,然后计算两个数的除法结果.读入的第一个数a是整数:读入的第二个数b是双精度浮点数: 将b转换为整数,然后计算整数除法 a/b,结果记为x: 将a转换为双精度浮点数,然后计算双精度浮点数除法 a/b ,结果记为 y 将a转换为双精度浮点数,将b转换为整数然后再转换为双精度浮点数,然后计算双精度浮点数除法 a/b,结果记为z 输出x.y.z的值. 本程序无需考虑除数为0.结果溢出等

对象和类(上)

1. 对象和类(上) 1.1. 面向对象程序设计 1.1.1. 面向过程的结构化程序设计 首先来看一个需求,实现员工信息管理,将员工简历信息中的数据:姓名.性别.年龄.薪水, 存储在信息管理系统中进行操作.可以定义一个输出雇员信息的方法进行数据的输出,传递4个参数,代码如下: /** 打印员工信息的方法 */ public static void printEmpInfo(String name,int age, chargender,double salary) { System.out.pr